【发布时间】:2021-06-17 13:10:54
【问题描述】:
我有一个UIView,里面有一些标签。标签具有取决于文本的动态高度,并且它们对父视图和彼此具有垂直间距约束,从而为父视图提供了高度。最后一个标签的底部和父视图底部之间的约束设置为具有较低的优先级。
另外,父视图有一个高度限制,我在viewDidLoad 中设置为0。这会折叠视图并将所有标签向下推,因为最后一个底部约束具有较低的优先级。然后我有一个按钮,我可以在其中切换父视图的高度约束,它可以打开/关闭它:
@IBAction func viewInfoButtonTapped(_ sender: Any) {
viewInfoButton.isSelected = !viewInfoButton.isSelected
self.infoHeightConstraint.isActive = !self.viewInfoButton.isSelected
UIView.animate(withDuration: 0.25) {
self.view.layoutIfNeeded()
}
}
我的问题是标签的动态高度直到我第一次展开父视图时才设置,所以不是简单地显示标签的动画,而是显示标签并增加高度的效果同时。第一次展开后,高度已经设置好了,后续的展开会给出正确的效果。
如何强制视图在第一次展开之前正确布置约束?
我试过打电话给setNeedsLayout()和layoutIfNeeded(),但是好像没有效果。
【问题讨论】:
标签: ios uiview autolayout