アプリをiOS 7に移行したときに、ビューコントローラーを表示すると、ステータスバーの下にナビゲーションバーが表示されます。多くの人がこの同じ問題に遭遇したと思います。これが私が見ているもののスクリーンショットです:
新しいビューは「モーダル」に表示される必要があります。つまり、presentViewControllerが必要です。
ステータスバーをiOS 7スタイルのナビゲーションバーの背景色にして、何らかのナビゲーションバーまたはツールバーを表示します。
IOS 6で動作する必要があります。
自動レイアウトを有効にして、レイアウトを処理するためにxibを使用しています。
うーん、iOS 5以前の日に戻って、フレームをいじくり回していますか?また、一般に、自動レイアウトと混合することはお勧めできません。
オプションAとBの1つの欠点は、ステータスバーがナビゲーションに溶け込まないことです。
主な欠点は、制約をいじって、ナビゲーションとステータスバーの高さを計算する必要があることです。ああ。
IOS 7ではうまく見えますが、iOS 6では機能しません。ナビゲーションバーの高さをプログラムで更新する必要があります。また、ビューの残りの部分も適切に更新する必要があります。乱雑。
複数の欠点:ios6/7デルタをハードコーディングすることになります。また、自動レイアウトでは機能しません。
これは私が選択した回避策です。以下の回答を参照してください。
私が見つけた最も簡単な回避策は、表示したいビューコントローラーをナビゲーションコントローラー内にラップしてから、そのナビゲーションコントローラーを表示することです。
MyViewController *vc = [MyViewController new];
UINavigationController *nav = [[UINavigationController alloc]
initWithRootViewController:vc];
[self presentViewController:nav animated:YES completion:NULL];
垂直制約を最上部のビューから上部レイアウトガイドに追加する必要があります-)Appleによる次の記事で説明されています。
https://developer.Apple.com/library/ios/qa/qa1797/_index.html
次のコードは私のために働いた。新しいコントローラーを提示しているコントローラーにそれを置くだけです。
#pragma mark hidden status bar
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:YES];
}
xibファイルを開き、viewcontrollerを選択します。インスペクタタブで属性を選択し、トップバーで「不透明ナビゲーションバー」を選択します。これで問題は解決しました。