0

質問

アプリケーションのウィンドウ (タイプ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 を追加することで解決された問題を思い出させます。

4

1 に答える 1