TL; DR:viewWillLayoutSubviews:
とviewDidLayoutSubviews:
が呼び出されるまで、ビュー階層は、iPadのプロ画面サイズに合わせて調整されていないことが表示されます。これがレイアウトシステムによって呼び出されるときは、ビュー階層の構築に依存します。
iPad用のアプリをアップデートする際にも同様の現象が見られます。そこで、View Controllerのライフサイクルイベントを詳しく見て、既存のプロジェクトと新しいプロジェクトの両方で何が起こっていたのかを確認しました。
ナビゲーションバー(ステータスバーのすぐ下に配置されている)とプライマリビュー(残りのスペースを占有し、自動レイアウトがオンになっている)のみを持つビューコントローラを使用すると、風景モードでラ次のスクリーンショット:
私は、ビューコントローラのライフサイクルのためのコンソールから次の出力見ている:私はここで見ることができるものから、
-[ViewController viewDidLoad] self.navigationBar: .frame: {{0, 20}, {1024, 44}}; .bounds: {{0, 0}, {1024, 44}}
-[ViewController viewDidLoad] self.primaryView: .frame: {{0, 64}, {1024, 704}}; .bounds: {{0, 0}, {1024, 704}}
-[ViewController viewWillAppear:] self.navigationBar: .frame: {{0, 20}, {1024, 44}}; .bounds: {{0, 0}, {1024, 44}}
-[ViewController viewWillAppear:] self.primaryView: .frame: {{0, 64}, {1024, 704}}; .bounds: {{0, 0}, {1024, 704}}
-[ViewController viewWillLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1024, 44}}; .bounds: {{0, 0}, {1024, 44}}
-[ViewController viewWillLayoutSubviews] self.primaryView: .frame: {{0, 64}, {1024, 704}}; .bounds: {{0, 0}, {1024, 704}}
-[ViewController viewDidLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[ViewController viewDidLayoutSubviews] self.primaryView: .frame: {{0, 64}, {1366, 960}}; .bounds: {{0, 0}, {1366, 960}}
-[ViewController viewDidAppear:] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[ViewController viewDidAppear:] self.primaryView: .frame: {{0, 64}, {1366, 960}}; .bounds: {{0, 0}, {1366, 960}}
を、ビューwiで始まるdthは1024ポイントですが、 'viewDidLayoutSubviews'が実行されると、適切なサイズが決定されます(1366ポイント)。ビュー階層が異なるためviewWillLayoutSubviews:
以前で呼び出される、この場合
-[XYZViewController viewDidLoad] self.navigationBar: .frame: {{0, 20}, {1024, 44}}; .bounds: {{0, 0}, {1024, 44}}
-[XYZViewController viewWillLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1024, 44}}; .bounds: {{0, 0}, {1024, 44}}
-[XYZViewController viewDidLayoutSubviews] self.navigationBar: .frame: {{0, 0}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewWillLayoutSubviews] self.navigationBar: .frame: {{0, 0}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewDidLayoutSubviews] self.navigationBar: .frame: {{0, 0}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewWillAppear:] self.navigationBar: .frame: {{0, 0}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewWillLayoutSubviews] self.navigationBar: .frame: {{0, 0}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewDidLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewWillLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewDidLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewDidAppear:] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
:スプリットビューコントローラを使用している1画面分の私自身のプロジェクトで
は、私は同様の動作を確認することができますコントローラのライフサイクルを表示し、正しいサイズはすでにviewWillAppear:
が呼び出された時点で決定されています。しかし、これは実際にビュー階層に依存しているので、ビュー階層を確認して、解像度依存コードを追加する最適な場所を決定することをお勧めします。
この問題に関するニュースはありますか?私は同じ問題を抱えている。私が何をしていても、iPad Proシミュレータでは常に1024 * 768を取得しています。 –
@GergelyKovacs今のところ私はそれを動作させる方法がわかりません。来週、この問題に戻るつもりです。私は面白い面白い見つける場合は、結果を説明します。 –
@AlexanderBalabanov - 私たちが援助できるように、あなたが経験している問題に関するさらに詳しい情報を提供できますか?私はまた、iPad Proのサポートをトラブルシューティングしており、すべてが適切にサポートできるようにしたいと考えています。 NSLogステートメントを実行してビューの境界を表示していますか?自動レイアウトを使用していますか?あなたが経験していることのいくつかの文脈を私たちに提供できるならば、うまくいけば、私たちは皆一緒にこの問題を解決するために協力することができます。 –