質問
アプリケーションのウィンドウ (タイプUIWindow *
、アプリ デリゲートのプロパティ) は のスーパー ビュー[[window rootViewController] view]
ですか?
アプリデリゲートメソッドの私のコードapplication:didFinishLaunchingWithOptions:
は[self window setRootViewController:[self myNavigationController]]
(self
アプリデリゲートを参照)です。私が書いていないことに注意してください[self window addSubview:[[self myNavigationController] view]];
。
非 ARC、Xcode 5、iOS 7 を使用して、すべてのビュー (ストーリーボードなし、インターフェイス ビルダーなし) をプログラムで作成します。
質問の文脈
この質問を知る必要がある理由は、ウィンドウがナビゲーション コントローラーである のスーパー ビューにtopLayoutGuide制約を追加したいからです。[[window rootViewController] view]
rootViewController
topLayoutGuide制約をコンテナー ビュー コントローラーのビューに追加できるように、カスタマイズされたコンテナー ビュー コントローラーを作成してナビゲーション コントローラーを含める方がよいかどうかはわかりませんが (明らかに、ナビゲーション コントローラーのビューのスーパービューです) )。
そのtopLayoutGuide制約を追加する必要がある理由は、ナビゲーション コントローラーのビューのフレームを変更してナビゲーション バーを表示/非表示にするときにコードにバグがあるように思われるためです。フレームの原点の y 座標を 64 ポイント (ステータス バーの高さ 20 ポイントにナビゲーション バーの 44 ポイントを加えた値) シフトして、ナビゲーション コントローラーのビュー ([[window rootViewController] ビュー] も) のフレームを設定すると、ナビゲーション コントローラーのコンテンツ ビューiOS 7 のみで、予期せずナビゲーション バーの下にさらに 20 ポイント移動しました。この予期しない動作は、 topLayoutGuide を追加することで解決された問題を思い出させます。