Xch*_*ord 1 cocoa-touch objective-c uiviewcontroller ios
在Xcode 8 iOS项目中调用layoutIfNeeded内部是否安全,viewDidLoad如下面的代码?
- (void)viewDidLoad {
[super viewDidLoad];
[self.view layoutIfNeeded];
CGFloat frameHeight = CGRectGetHeight(self.frame);
subview.layer.cornerRadius = frameHeight * 0.5;
}
Run Code Online (Sandbox Code Playgroud)
它没有在Xcode 7中正常工作layoutIfNeeded.
如果您有问题,可以在viewDidLayoutSubviews()中调用它.
从Apple iOS 10发行说明是:
发送layoutIfNeeded到视图不会移动视图,但在早期版本中,如果视图已将translateOutoresizingMaskIntoConstraints设置为NO,并且如果它是通过约束定位的,则layoutIfNeeded将移动视图以匹配布局引擎,然后再将布局发送到子树.这些更改可以纠正此行为,并且接收器的位置和通常其大小不会受layoutIfNeeded的影响.
某些现有代码可能依赖于现在已更正的此错误行为.在iOS 10之前链接的二进制文件没有行为更改,但是在iOS 10上构建时,您可能需要通过将-layoutIfNeeded发送到前一个接收器的translatesAutoresizingMaskIntoConstraints视图的超级视图来纠正某些情况,或者之前定位和调整它的大小(或之后,取决于您所希望的行为)layoutIfNeeded.
使用自动布局的自定义UIView子类的第三方应用程序在调用超级之前覆盖layoutSubviews和self上的脏布局有可能在iOS 10上重建时触发布局反馈循环.当正确发送后续layoutSubviews调用时,他们必须确保在某些时候停止弄脏自己的布局(注意在iOS 10之前的版本中跳过了这个调用)."
基本上你不能在View的子对象上调用layoutIfNeeded - 现在调用layoutIfNeeded必须在superView上,你仍然可以在viewDidLayoutSubviews中调用它.
| 归档时间: |
|
| 查看次数: |
1283 次 |
| 最近记录: |