自动布局调整视图大小



我有两个多行标签的自定义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()

最新更新