2017-09-26 2 views
3

iPhone Xのビューを調整する必要がありますが、safeAreaInsetsがいつ初期化されるかはわかりません。文書によると、いつUIEdgeInsets safeAreaInsetsを呼び出すことができますか?

ビューが現在のビュー階層にインストールされていない、または はまだ画面上に表示でない場合、このプロパティのエッジインセットが0

ている私はと思うだろうviewDidLoadが呼び出されると、値が設定されますが、そうではありません。私はviewDidLayoutSubviewsが呼び出されたときに値を取得できますが、それは遅すぎるようで、とにかく正しい値を返しません。

どのようにsafeAreaInsetsプロパティを私に使用するか説明できますか?

+0

'viewDidLoad'を呼び出すと、ビューはまだビュー階層にインストールされていません。インセットがトップ/ボトムレイアウトガイドのようなものであれば、レイアウト中に設定されている可能性があります。つまり、viewDidLayoutSubviewsが正しい時刻でなければなりません(ビューコントローラの直接ビューの場合、サブビューはまだレイアウトされていません'viewDidLayoutSubviews'が呼び出されます)。 –

+0

'viewSafeAreaInsetsDidChange'を実装することで、いつ設定されているかを知ることができます。 – Joey

答えて

2

これらは、ビューがレイアウトされる前(ビュー階層内)に初期化されます。 にアクセスし、それに応じて行動するのがviewWillLayoutSubviewsの方法です。すでに言及したようにviewDidLayoutSubviewsは少しです。が遅すぎますが、willLayoutSubviewsはうまく動作します。ハッピーコーディング!

関連する問題