1.默认center 模式 居中

btn.contentHorizontalAlignment = UIControl.ContentHorizontalAlignment.right
right 和 trailing效果一样

======= ======= ======= ======= ======= ======= ======= ======= =======
fill

======= ======= ======= ======= ======= ======= ======= ======= =======
leading 和 left 效果一样
if #available(iOS 11.0, *) {
btn.contentHorizontalAlignment = UIControl.ContentHorizontalAlignment.leading
} else {
// Fallback on earlier versions
}

2. 改变图片显示区域
// deleteBtn.setEnLargeEdge(16, 16, 16, 16) deleteBtn.adjustsImageWhenHighlighted = false deleteBtn.setImage(R.image.famle_account_more(), for: .normal) // deleteBtn.image("famle_account_more") deleteBtn.addTarget(self, action: #selector(deleteAction), for: .touchUpInside) bgView.addSubview(deleteBtn) deleteBtn.imageEdgeInsets = UIEdgeInsets(top: 12, left: 12, bottom: 12, right: 12)//图片16*16 deleteBtn.snp.makeConstraints { make in make.width.height.equalTo(40) make.right.equalTo(-16) make.centerY.equalTo(phoneLabel) }
如果居右显示
deleteBtn.imageEdgeInsets = UIEdgeInsets(top: 12, left: 24, bottom: 12, right: 0)//图片16*16
需求:Swift 写一个按钮,长93,宽26,图片在左边,图片宽高16,图片左边距12,和按钮的Y 居中显示,文字在图片右边显示,文字的左边距离图片右边的间隔为4,文字距离右边父view间距12,文字居中,字体大小12
// 创建按钮 let button = UIButton(type: .custom) button.frame = CGRect(x: 50, y: 100, width: 93, height: 26) button.backgroundColor = .systemBlue // 设置背景色 // 设置按钮图片 let image = UIImage(named: "your_image_name") // 替换为你的图片名 button.setImage(image, for: .normal) // 设置图片的宽高为16,左边距12,Y居中 button.imageEdgeInsets = UIEdgeInsets(top: 5, left: 12, bottom: 5, right: 4) // 设置按钮的标题 button.setTitle("按钮文字", for: .normal) // 设置字体大小为12,文字居中 button.titleLabel?.font = UIFont.systemFont(ofSize: 12) button.titleLabel?.textAlignment = .center // 设置标题的边距,右边距为12 button.titleEdgeInsets = UIEdgeInsets(top: 0, left: 4, bottom: 0, right: 12) // 将按钮添加到视图中 self.view.addSubview(button)
imageEdgeInsets的right已经设置4, 为什么titleEdgeInsets的left还要设置4?
这是因为 imageEdgeInsets 和 titleEdgeInsets 控制的是图片和文字的布局,它们是相互独立的。具体来说:
imageEdgeInsets主要影响图片的位置,在按钮内部调节图片的边距。titleEdgeInsets主要控制文字的位置,调节文字与按钮其他部分的间距。
所以,imageEdgeInsets.right = 4 只是控制了图片和按钮右侧的间距,而 titleEdgeInsets.left = 4 则保证文字与图片之间有一个 4 的间隔。
如果不设置 titleEdgeInsets.left = 4,文字可能会与图片太过贴近,导致视觉上的不美观。所以设置 titleEdgeInsets.left = 4 是为了确保文字不会紧贴着图片。
简而言之,两者是独立设置的,imageEdgeInsets 只影响图片,而 titleEdgeInsets 只影响文字的间距。
======= ======= ======= ======= ======= ======= ======= ======= =======
======= ======= ======= ======= ======= ======= ======= ======= =======
浙公网安备 33010602011771号