UILabel 具有来自编程约束的内部填充
Posted
技术标签:
【中文标题】UILabel 具有来自编程约束的内部填充【英文标题】:UILabel has internal padding from programmatic constraints 【发布时间】:2016-10-10 00:44:02 【问题描述】:所以,我不知道为什么会发生这种情况,但这里有一张描述它的图片。
如果你看绿色背景的 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.
【问题讨论】:
【参考方案1】:好吧,您通过使用 left
值包装该正文标签来添加该填充。
所以,而不是:
V:|-right-[titleLabel(20)]-left-[bodyLabel(>=0@999)]-left-|
执行以下操作:
V:|-right-[titleLabel(20)][bodyLabel(>=0@999)]|
这将删除顶部和底部的填充。希望对您有所帮助!
【讨论】:
我确实试过了,但也没有用。这会影响红色和绿色标签之间的空间。它实际上并不影响标签本身。在这一点上,我正在考虑尝试使用自定义 XIB。我认为这可能与强制单元格的最小高度有关,但即使我在绿色范围内键入几行,该空间仍然存在。 我最终创建了一个 XIB,它确实有助于向我展示正在发生的事情。这基本上是正确的,但我需要在其他地方进行更改才能真正得到我想要的。【参考方案2】:您需要将边缘设置为 UILabel。
请参阅以下链接以获取解决方案: ios Add left padding to UILabel
【讨论】:
以上是关于UILabel 具有来自编程约束的内部填充的主要内容,如果未能解决你的问题,请参考以下文章