xcode8になってAutoLayoutの挙動が変更された……?

自分自身まだ調査しきれていないのですが, xcode8となりstoryboardのバージョンの変更になるに辺り、viewのライフサイクル中のAutoLayoutのタイミングの変更が合ったようです。

viewDidLoadで得るサイズはAutoLayout後のサイズではない!!

具体的には(0,0,1000,1000)になっているようで、subview.bounds等でサイズ指定をしていた場合、上手く動かなくなるでしょう

ViewDidAppearで正確にサイズが分かるようですが、表示がおわっているので、ここでサイズの指定を行うのは適していません。

とりあえずの対策

  • viewDidLayoutSubviewsに処理を書く
  • viewDidLoadで処理の最初にlayoutIfNeededを呼ぶ
  • storyboardのバージョンをあげない

等があるようです。


参考 Xcode 8 sets frame size differently. How do I find more details?

XCODE8,iOS10にてview.layer周りの表示がされない場合がある