在viewDidLayoutSubviews

时间:2017-06-01 18:44:42

标签: ios objective-c

我需要一些帮助来理解viewDidLAyoutSubviews方法以及如何安全地使用它。

我需要在viewDidAppear方法之前以编程方式编辑我的一些子视图。为了使其正常工作,我当然需要等到目标子视图被布局后再编辑它们。

现在我认为这是viewDidLayoutSubviews方法的用途,但是当我测试它时,我发现它在我的viewDidAppear方法之前实际上被调用了两次。我只是在第一次调用viewDidLayoutSubviews时尝试编辑我的子视图,因为我只想运行一次[self editMySubviews],但是目标子视图还没有准备就绪并且搞砸了。这就是我尝试的方式:

- (void)viewDidLayoutSubviews {
    if (!myBoolean) {
        [self editMySubviews];
        myBoolean = YES;
    }
}

当然,如果我删除if-statement,它会在下次调用该方法时自行修复,但我只想要调用[self editMySubviews]一次。

所以我的问题是,当我可以在[self editMySubviews]方法之前调用viewDidAppear方法,并且100%确定所有子视图都可以编辑?现在在我的情况下,viewDidLayoutSubviewsviewDidAppear之前被调用两次,但每次都是这样吗?在第二次调用[self editMySubviews]后调用viewDidLayputSubviews是否安全?

1 个答案:

答案 0 :(得分:0)

根据你的评论,你说

根据不同设备上不同的superView.frame.size.width编辑一些按钮约束

在viewdidload之后,您将从view.bounds获得正确的大小 这样您就可以轻松设置/更新约束并在此末尾添加 setNeedsUpdateConstraints和layoutIfNeeded方法调用

相关问题