Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在viewDidLayoutSubviews之后调用方法一次_Ios_Objective C - Fatal编程技术网

Ios 在viewDidLayoutSubviews之后调用方法一次

Ios 在viewDidLayoutSubviews之后调用方法一次,ios,objective-c,Ios,Objective C,我需要一些帮助来理解viewdilayoutsubviews方法以及如何安全地使用它 在使用viewdide方法之前,我需要以编程方式编辑一些子视图。为了让它正常工作,我当然需要等到目标子视图布置好之后再编辑它们 现在我认为这就是viewdilayoutsubviews方法的作用,但是当我测试它时,我发现它实际上在我的viewdideappear方法出现之前被调用了两次。我只是在第一次调用viewdilayoutsubviews时才尝试编辑我的子视图,因为我只想运行[self-editMySub

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

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


现在我认为这就是
viewdilayoutsubviews
方法的作用,但是当我测试它时,我发现它实际上在我的
viewdideappear
方法出现之前被调用了两次。我只是在第一次调用
viewdilayoutsubviews
时才尝试编辑我的子视图,因为我只想运行
[self-editMySubviews]
一次,但是目标子视图没有准备好,所以它就搞砸了。我就是这样尝试的:

- (void)viewDidLayoutSubviews {
    if (!myBoolean) {
        [self editMySubviews];
        myBoolean = YES;
    }
}
当然,如果我删除
if语句
,它会在下次调用该方法时自行修复,但我只希望调用一次
[self-editMySubviews]


所以我的问题是,什么时候我可以在
视图出现之前调用
[self-editMySubviews]
方法,并100%确保所有子视图都可以编辑?现在在我的例子中,
viewdilayoutsubviews
viewdid出现之前被调用了两次,但是每次都是这样吗?在第二次调用
viewDidLayputSubviews
后,只调用
[self-editMySubviews]
安全吗?

根据您的评论,您说


根据不同设备上不同的superView.frame.size.width编辑某些按钮约束 viewdidload之后,您将从view.bounds获得正确的大小 因此,您可以轻松设置/更新约束,并在末尾添加约束

setNeedsUpdateConstraints和layoutifneed方法调用


根据不同设备上不同的superView.frame.size.width编辑某些按钮约束 viewdidload之后,您将从view.bounds获得正确的大小 因此,您可以轻松设置/更新约束,并在末尾添加约束

setNeedsUpdateConstraints和layoutIfNeeded方法调用

您在
EditMySubview
中做什么?根据不同设备上不同的superView.frame.size.width编辑一些按钮约束,为什么只需执行一次?在超级视图大小更改的情况下,您应该在每次子视图布局更改时执行此操作。因为我想控制调用它的时间,所以我不希望每次子视图更改时都调用它。
viewdilayoutsubviews
对于布局的单个更改多次调用您无法确定哪个调用会给出正确的结果,所以让它保持原样,让它调用多次没有问题。你在
editMySubviews
中做什么?根据不同设备上不同的superView.frame.size.width编辑一些按钮约束,那么为什么只需要做一次呢?在超级视图大小更改的情况下,您应该在每次子视图布局更改时执行此操作。因为我想控制调用它的时间,所以我不希望每次子视图更改时都调用它。
viewdilayoutsubviews
对于布局的单个更改多次调用您无法确定哪个调用会给出正确的结果,所以,让它保持原样,让它多次调用,这样就没有问题了。