2017-06-01 112 views
0

我需要一些帮助来了解viewDidLAyoutSubviews方法以及如何安全地使用它。在viewDidLayoutSubviews之后调用一次方法

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

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

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

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

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

+0

你在做什么'editMySubviews'? – dan

+0

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

+0

那么为什么你只需要做一次?每当子视图布局考虑超视图尺寸变化时,您都应该这样做。 – dan

回答

0

根据你的评论,根据其superView.frame.size.width这是不同的在不同的设备

viewDidLoad中后,你会得到view.bounds适当的大小表示

编辑一些按钮限制 所以你可以很容易地设置/更新约束和添加在这个
setNeedsUpdateConstraints和layoutIfNeeded方法调用

相关问题