Swift 纯代码开发:如何为UILabel添加padding内边距和margin外边距
实现方案
一、给UILabel添加内边距(Padding)
UILabel原生不支持直接设置内边距,你可以通过自定义UILabel子类实现:
首先新建自定义PaddingLabel类:
class PaddingLabel: UILabel { // 自定义内边距,可根据需求调整数值 var padding = UIEdgeInsets(top: 10, left: 12, bottom: 10, right: 12) { didSet { invalidateIntrinsicContentSize() } } override func drawText(in rect: CGRect) { super.drawText(in: rect.inset(by: padding)) } override var intrinsicContentSize: CGSize { let size = super.intrinsicContentSize return CGSize(width: size.width + padding.left + padding.right, height: size.height + padding.top + padding.bottom) } }
然后替换你原有代码中instructionText的初始化逻辑,把控件类型从UILabel替换为PaddingLabel即可:
private let instructionText : PaddingLabel = { let label = PaddingLabel() label.text = "Please read terms and conditions below carefully before proceeding with the registration." label.backgroundColor = UIColor().colorFromHex(hex: "#2C333C", opacity: 0.4) label.numberOfLines = 0 label.textColor = .white // 原有代码设置tintColor无效,文本颜色需修改textColor属性 label.layer.masksToBounds = true // 配合圆角设置生效 return label }()
如果需要自适应文本高度,你可以删除frame中写死的height参数,调用instructionText.sizeToFit()即可自动计算适配高度。
二、给UILabel添加外边距(Margin)
你当前使用frame布局,直接调整label的frame参数即可实现外边距控制,参考你现有的frame设置:
instructionText.frame = CGRect( x: 5, y: 5 + logoImage.bottom, width: view.width - 20, height: 50) .integral
各边距调整规则:
- 左外边距:修改
x参数,比如要左外边距设为20,就把x赋值为20 - 右外边距:调整width参数,总宽度=父视图宽度 - 左外边距 - 右外边距,比如左右外边距都要20,width就设为
view.width - 40 - 上外边距:修改y参数的偏移值,比如要和上方logoImage的间距为15,就把y设为
15 + logoImage.bottom - 下外边距:如果下方有其他控件,设置下方控件的y值为
instructionText.bottom + 下外边距数值即可
如果你后续改用AutoLayout布局,直接调整对应约束的constant值即可实现边距控制。
内容的提问来源于stack exchange,提问作者Punreach Rany
相关产品推荐
相关产品推荐

