🍎

[Swift]viewDidLayoutSubviewsの使用場面

2022/02/15に公開

経緯

layoutに関するコードはとりあえず感覚でdidLoad内に書いていた為。

コードでのAutoLayout後の変更処理

AutoLayoutでの値決定後に呼ばれるのが、
viewDidLayoutSubviewsで、
それ以前のライフサイクルでAutoLayoutで決まる値にアクセスすると、
意図した挙動にならないことがあります。
よってAutoLayout後に変更を加えたい場合や、
frameの値を使用したい場合などは、
viewDidLayoutSubviews内で記述すると良いです。

viewDidLayoutSubviewsの注意点

実はこのメソッドはViewのlayoutSubviewsがコールされた後に、
VC側でコールされるので、
複数回コールされる場合が多々あります。
例えば最初のコール内容では、
端末のサイズでのAutoLayoutが効いていないが、
最後にコールされた内容ではAutoLayoutでの値が決定されていて、
Storyboard上での制約は反映されているなどが分かりやすい例です。
ただviewDidLayoutSubviews内で記述した指定した値を反映させたい場合は、

self.view.layoutIfNeeded

これを記述して、再度ViewのlayoutSubviewsをコールさせる必要があります。
そうしないと変更したい値が反映されないので注意です。

Discussion