我正在尝试创建一个具有动态高度内容的垂直和水平居中的堆栈视图。像这样的东西:
我和我几乎在那里,但问题是当我添加一个高度应该是动态的按钮(带标签的比例)时,我得到这个:(注意重叠的按钮)。
这是我现在拥有的:
如果没有带长标签的按钮,视图看起来很好。现在我已经阅读了关于自动布局如何工作的概念,它需要知道内容的高度以使其居中。但是关于内容高度未知的情况?
将titleLabel
的UIButton
设置为多行(将Line Break更改为Word Wrap)不会更改按钮的intrinsicContentSize
,因此您必须自己完成。
这是一种方法。子类UIButton
像这样:
class CheckboxButton: UIButton {
override var intrinsicContentSize: CGSize {
return titleLabel?.intrinsicContentSize ?? CGSize.zero
}
override func layoutSubviews() {
super.layoutSubviews()
titleLabel?.preferredMaxLayoutWidth = titleLabel?.frame.size.width ?? 0
super.layoutSubviews()
}
}
您可以通过为按钮提供背景颜色(在开发期间)来确认正确进行尺寸调整,以清楚地看到其边界/框架。
之后,应通过自动布局正确处理间距。