UILabel具有来自程序性约束的内部填充

时间:2016-10-10 00:44:02

标签: ios swift autolayout uilabel nslayoutconstraint

所以,我不知道为什么会这样,但这是一张描绘它的照片。

enter image description here

如果你看看绿色背景的UILabel,它上面和下面都有填充物,但我不知道为什么会这样。

这是我创建它的方式:

var bodyLabel: ActiveLabel = {
    let label = ActiveLabel()
    label.translatesAutoresizingMaskIntoConstraints = false
    label.isUserInteractionEnabled = false
    label.backgroundColor = .green
    label.numberOfLines = 0
    label.textColor = .darkGray
    label.font = UIFont.systemFont(ofSize: MessageTableViewCell.defaultFontSize())

    label.enabledTypes = [.mention]
    label.mentionColor = .gray //Figure this out

    return label
}()

它是ActiveLabel的事实并不是发生这种情况的原因。

以下是它所涉及的所有限制因素:

self.contentView.addSubview(self.thumbnailView)
self.contentView.addSubview(self.titleLabel)
self.contentView.addSubview(self.bodyLabel)
self.contentView.addSubview(self.likeView)

let views = ["thumbnailView" : self.thumbnailView,
                 "titleLabel" : self.titleLabel,
                 "bodyLabel" : self.bodyLabel,
                 "likeView"  : self.likeView] as [String : Any]

let metrics = ["tumbSize" : Constants.kMessageTableViewCellAvatarHeight,
                   "padding" : 15,
                   "right" : 10,
                   "left" : 5]

self.contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-left-[thumbnailView(tumbSize)]-right-[titleLabel(>=0)]-right-|", options: [], metrics: metrics, views: views))
self.contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-left-[thumbnailView(tumbSize)]-right-[bodyLabel(>=0)]-right-|", options: [], metrics: metrics, views: views))
self.contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-right-[thumbnailView(tumbSize)]-(>=0)-|", options: [], metrics: metrics, views: views))

if self.reuseIdentifier == Constants.MessageCellIdentifier {
    self.contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-right-[titleLabel(20)]-left-[bodyLabel(>=0@999)]-left-|", options: [], metrics: metrics, views: views))
} else {
    self.contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[titleLabel]|", options: [], metrics: metrics, views: views))
}

我注意到当我删除if语句中的约束时,显然视图会进入尴尬的位置,但我注意到它不再具有绿色填充。我真的不确定导致这种填充的原因。

这就是the code is based on.

2 个答案:

答案 0 :(得分:1)

好吧,你是通过用left值包装身体标签来添加填充。

所以代替: V:|-right-[titleLabel(20)]-left-[bodyLabel(>=0@999)]-left-|

执行以下操作: V:|-right-[titleLabel(20)][bodyLabel(>=0@999)]|

这将删除顶部和底部填充。我希望有所帮助!

答案 1 :(得分:0)

您需要将边缘设置为UILabel。

请参阅以下链接以获取解决方案: iOS Add left padding to UILabel