升级到Xcode 8后,viewDidLayoutSubviews中的UIView帧错误

时间:2016-09-19 01:34:04

标签: xcode frame xib

在我的每个xib中,它都问我要使用什么默认设备。我选择iPhone 6并将帧更新为建议的帧。现在,在viewWill或viewDidLayoutSubviews中受影响的任何视图都搞砸了。它们都有CGRect(0, 0, 1000, 1000)的框架。

这是我的代码:

self.headImage.layer.cornerRadius = ceilf(CGRectGetWidth(self.headImage.frame)/2);
self.headImage.layer.masksToBounds = YES;

想知道这是什么以及是否有解决方案。感谢

3 个答案:

答案 0 :(得分:10)

我通过致电

解决了我的问题
myOwnView.layoutIfNeeded() 

获取myOwnView.frame

之前

答案 1 :(得分:0)

当我从推送的ViewController返回并且在ViewDidLayoutSubviews的帧中不正确时,此问题发生在我身上。

我的视图的width constraint设置为与父视图的宽度成比例,并且没有恒定的偏移量。我用offset constraints代替了比例约束,现在可以正确计算帧了。

此问题发生在XCode 10,iOS 12,iPhone 6 Plus上。

答案 2 :(得分:0)

如果甚至viewDidLayoutSubviews给了您错误的帧-在layoutSubviews上调用 layoutIfNeeded 也可以解决问题!

override func layoutSubviews() {
    super.layoutSubviews()

    yourView.layoutIfNeeded()
    setGradientForYourView()

}