UIViewControllerのViewWillLayoutSubviews
およびViewDidLayoutSubviews
メソッドはいつ呼び出されますか? willLayoutSubviews
の前のビューのフレームのステータスは何ですか?
ドキュメントから:
ビューの境界が変更されると、ビューはそのサブビューの位置を調整します。ビューがサブビューをレイアウトする前に、View Controllerでこのメソッドをオーバーライドして変更を加えることができます。 (リンク)
viewWillLayoutSubviews
は、View Controllerのビューの境界が変更されるたびに呼び出されます。これは、ビューがロードされたとき、回転イベントが発生したとき、または子View Controllerのサイズが親によって変更されたときに発生します。 (おそらく他にもいくつかの状況があります)。そのビューがレイアウトされる前に(および制約が再適用される前に)更新する必要があるものがある場合は、ここで実行する必要があります。制約を更新すると別のレイアウトパスが発生する可能性があるため、通常はここで制約を更新notする必要があります。
すべてのサブビューがレイアウトされると、viewDidLayoutSubviews
が呼び出されます。たとえば、フレームを手動で調整してそのレイアウトを微調整する必要がある場合は、これがその場所です。
view Controllerのライフサイクルは少々混乱する可能性がありますが、iOSの開発を多く行うつもりかどうかを本当に理解してみる価値はあります。 この記事 は非常に良い概要です。