2017-09-18 29 views
9

私はscrollViewに2つの子viewControllerが含まれています。 VC2が正しくレイアウトされていないことがわかります。サブエリアがビューエリアにないときに安全領域がiPhone Xで正常に機能しない

画面に表示されていない場合は見つかりました。 safeAreaInsetsは常に0です。

スクロールが終了したときにこの問題を解決するには、vc2.view.setNeedsLayout()と呼ぶことができます。 しかし、スクロールが終了するまでレイアウトが正しくありません。

document

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

あると言いますこの状況を修正できますか?

enter image description here

自動レイアウト enter image description here enter image description here

+0

あなたは、より多くの情報を提供する「VC1ボトム」と「ボトムVC2」の制約がどのように見えるか、私たちを表示する必要があります。彼らはまったく同じですか? – jonaszmclaren

+0

はい。これは、セーフエリアとボトムからセーフエリアまで同じ制約条件です。 – PowHu

+0

'viewDidLayoutSubviews()'などに 'vc2.view.setNeedsLayout()'を入れるのにうんざりですか? (潜在的な無限ループを防ぐための適切なテストを伴う) – Zaphod

答えて

0

私が正しく表示されている場合は、あなたのコンテナビューはスーパーのITの上部と下部に固定されます。それをセーフエリアに固定すると、子ビューコントローラが適切に配置されます。代わりに、現在のビューのsafeAreaInsetsを参照の

+1

いいえ、コンテナビューのサイズはsuperViewと同じです。 – PowHu

7

は、のUIApplicationに設定します。

(UIApplication.shared.delegate?.window??.safeAreaInsets.bottom) 
+0

'safeAreaInsets'はiOS 11.0以降をターゲットにしてのみ利用可能です –

関連する問題