🍎
[Swift]viewDidLayoutSubviewsの使用場面
経緯
layoutに関するコードはとりあえず感覚でdidLoad内に書いていた為。
コードでのAutoLayout後の変更処理
AutoLayoutでの値決定後に呼ばれるのが、
viewDidLayoutSubviewsで、
それ以前のライフサイクルでAutoLayoutで決まる値にアクセスすると、
意図した挙動にならないことがあります。
よってAutoLayout後に変更を加えたい場合や、
frameの値を使用したい場合などは、
viewDidLayoutSubviews内で記述すると良いです。
viewDidLayoutSubviewsの注意点
実はこのメソッドはViewのlayoutSubviewsがコールされた後に、
VC側でコールされるので、
複数回コールされる場合が多々あります。
例えば最初のコール内容では、
端末のサイズでのAutoLayoutが効いていないが、
最後にコールされた内容ではAutoLayoutでの値が決定されていて、
Storyboard上での制約は反映されているなどが分かりやすい例です。
ただviewDidLayoutSubviews内で記述した指定した値を反映させたい場合は、
self.view.layoutIfNeeded
これを記述して、再度ViewのlayoutSubviewsをコールさせる必要があります。
そうしないと変更したい値が反映されないので注意です。
Discussion