アプリを iOS 7 に移行したときに、View Controller を表示すると、ナビゲーション バーがステータス バーの下に表示されます。多くの人がこの同じ問題に遭遇したと思います。これが私が見ているもののスクリーンショットです:
要件:
新しいビューは「モーダル」に表示される必要があります。つまり、presentViewController が必要です。
iOS 7 スタイルのナビゲーション バーの背景色をステータス バーに使用して、ある種のナビゲーション バーまたはツールバーを表示します。
iOS 6 で動作する必要があります。
自動レイアウトを有効にして、xib を使用してレイアウトを処理しています。
オプション:
A. ビューのフレームを少し下に移動します。
うーん、私たちはiOS 5日前に戻ってフレームをいじっているのでしょうか? また、一般的に、autolayout と混合することはお勧めできません。
B. ナビゲーション バーの上部に少し隙間を追加します。
オプション A と B の欠点の 1 つは、ステータス バーがナビゲーションに溶け込まないことです。
C. プログラムで制約を追加します。
主な欠点は、制約をいじったり、ナビゲーション バーとステータス バーの高さを計算したりする必要があることです。うん。
D. ナビゲーション バー / ツールバーの高さを伸ばして、ステータス バーの領域を含める。
iOS 7 では見栄えがしますが、iOS 6 では機能しません。ナビゲーション バーの高さをプログラムで更新する必要があります。また、ビューの残りの部分が適切に更新されることを確認してください。混雑。
E. IB での iOS6/7 デルタの混乱。
複数の欠点: ios6/7 デルタをハードコーディングすることになります。また、自動レイアウトでは機能しません。
F. ネストされた UINavigationController を使用します。
これは私が選択した回避策です。以下の回答を参照してください。