【发布时间】:2017-06-01 18:44:41
【问题描述】:
我需要一点帮助来理解viewDidLAyoutSubviews方法以及如何安全地使用它。
我需要在viewDidAppear 方法之前以编程方式编辑我的一些子视图。为了让它正常工作,我当然需要等到目标子视图布局好后再编辑它们。
现在我认为这就是 viewDidLayoutSubviews 方法的用途,但是当我测试它时,我发现它实际上在我的 viewDidAppear 方法之前被调用了两次。我只在第一次调用viewDidLayoutSubviews 时尝试编辑我的子视图,因为我只想运行一次[self editMySubviews],但是目标子视图还没有准备好并且它搞砸了。我就是这样尝试的:
- (void)viewDidLayoutSubviews {
if (!myBoolean) {
[self editMySubviews];
myBoolean = YES;
}
}
当然,如果我删除if-statement,它会在下次调用该方法时自行修复,但我只想调用一次[self editMySubviews]。
所以我的问题是,什么时候我可以在viewDidAppear 方法之前调用[self editMySubviews] 方法,并且100% 确定所有子视图都准备好进行编辑?现在在我的情况下,viewDidLayoutSubviews 在viewDidAppear 之前被调用了两次,但每次都会这样吗?在第二次调用viewDidLayputSubviews 之后再调用[self editMySubviews] 是否安全?
【问题讨论】:
-
你在
editMySubviews做什么? -
根据不同设备上不同的superView.frame.size.width编辑一些按钮约束
-
那你为什么只需要做一次呢?每次子视图布局时都应该这样做,以防超级视图大小发生变化。
-
因为我想控制它何时被调用,我不希望它在每次子视图更改时都被调用。
-
viewDidLayoutSubviews多次调用布局中的单个更改您无法确定哪个调用给出了正确的结果,所以让它保持原样让它多次调用没有问题。
标签: ios objective-c