在Xcode 8 iOS项目的layoutIfNeeded中调用viewDidLoad是否安全(如以下代码)?

- (void)viewDidLoad {
    [super viewDidLoad];

    [self.view layoutIfNeeded];

    CGFloat frameHeight = CGRectGetHeight(self.frame);
    subview.layer.cornerRadius = frameHeight * 0.5;
}

在没有layoutIfNeeded的Xcode 7中,它可以正常工作。

最佳答案

如果有问题,可以在viewDidLayoutSubviews()中调用它。
从Apple iOS 10发行说明是:

向视图发送layoutIfNeeded不会移动视图,但是在较早的版本中,如果视图已将translatesAutoresizingMaskIntoConstraints设置为NO,并且被约束定位,则layoutIfNeeded会在将布局发送至之前将视图移动以匹配布局引擎。子树。这些更改可以纠正此问题,并且接收机的位置以及通常情况下的尺寸不会受到layoutIfNeeded的影响。
某些现有代码可能依赖于此错误行为,该错误行为现在已纠正。 iOS 10之前链接的二进制文件没有行为更改,但是在iOS 10上构建时,您可能需要通过将-layoutIfNeeded发送到先前接收者的translationsAutoresizingMaskIntoConstraints视图的 super 视图中来纠正某些情况,或者在之前对其进行定位和调整大小(或之后,取决于您想要的行为)layoutIfNeeded。
使用Auto Layout的具有自定义UIView子类的第三方应用程序在调用super之前会覆盖layoutSubviews和自身上的脏布局,它们在iOS 10上重建时有触发布局反馈循环的风险。当正确发送后续的layoutSubviews调用时,他们必须确保停止在自己身上弄脏布局(请注意,此调用在iOS 10之前的版本中已被跳过)。”

本质上,您不能在View的子对象上调用layoutIfNeeded-现在必须在superView上调用layoutIfNeeded,并且仍然可以在viewDidLayoutSubviews中调用它。

关于ios - 可以在viewDidLoad中使用layoutIfNeeded确定拐角半径大小吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39730408/

10-12 22:14