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

Pis*_*Zjc 8 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;
Run Code Online (Sandbox Code Playgroud)

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

Ind*_*dia 13

我通过电话解决了我的问题

myOwnView.layoutIfNeeded() 
Run Code Online (Sandbox Code Playgroud)

在得到之前 myOwnView.frame

  • 这行得通,但是我不确定为什么要这么做。我假设布局传递在didLayoutSubviews回调之前完成。 (2认同)
  • 这也适用于我,但我认为 viewDidLayoutSubviews() 的全部目的是让视图已经布局? (2认同)

Vit*_*pov 5

如果甚至 viewDidLayoutSubviews 给你错误的框架 - 在layoutSubviews上调用layoutIfNeeded可以解决这个问题!

override func layoutSubviews() {
    super.layoutSubviews()

    yourView.layoutIfNeeded()
    setGradientForYourView()
Run Code Online (Sandbox Code Playgroud)

}