我有两个多行标签的自定义UIView
。有时我需要隐藏此视图,所以我将hidden = YES
和高度约束设置为0。
我是这样做的,但我不太确定是否可以更改自定义UIViews'
layoutSubviews
中的约束。
- (void)layoutSubviews {
[super layoutSubviews];
if (!self.hidden) {
self.heightConstraint.constant = 15 + self.titleLabel.frame.size.height + 4 + self.bodyLabel.frame.size.height + 15;
} else {
self.heightConstraint.constant = 0;
}
}
我知道布局不是单行道过程,layoutSubviews
可能导致updateConstraints
,反之亦然。
在layoutSubviews
中更改视图本身的约束是否安全?
layoutSubviews
是在updateConstraints
方法完成其工作后调用的。如果在那之后更改了约束条件,则必须再次调用[super layoutSubviews]
。修改约束的正确位置是在updateConstraints
方法中,但在您的情况下,您可以简单地在layoutSubviews
方法之外进行更改,然后在完成后调用setNeedsLayout
。
您需要setNeedsLayout
方法。示例:
self.view.setNeedsLayout()