ナビゲーションバーまたはツールバー(ストーリーボード)をView Controllerにドラッグすると問題が発生します。
UINavigationBar:
上の画像でわかるように、右側のボタンはステータスバーにほぼ重なっています。
UIToolbarでも同じことが起こります:
このView Controllerはモーダルとして使用することを目的としているため、UINavigationControllerを使用していません。
別のセクションでは、UINavigationControllerを使用していますが、期待どおりに表示されます。
INavigationBar/UIToolbarをステータスバーと重ならないようにView Controllerにドラッグするにはどうすればよいですか?
ナビゲーションバーまたはツールバーは(0、viewController.topLayoutGuide.length
)UIBarPositionTopAttached
のバーの配置。ナビゲーションバーまたはツールバーのデリゲートをView Controllerに設定し、UIBarPositionTopAttached
を返す必要があります。正しく配置されていれば、3番目の画像に結果が表示されます。
詳細はこちら: https://developer.Apple.com/documentation/uikit/uibarpositioningdelegate?language=objc
これらの手順を実行します
NavigationBarをXibのViewControllerにドラッグし、ViewControllerをデリゲートとして設定します。 NavigationBarは(0、20)にあることに注意してください
ViewControllerで、UINavigationBarDelegate
に準拠します
@interface ETPViewController () <UINavigationBarDelegate>
このメソッドを実装する
- (UIBarPosition)positionForBar:(id <UIBarPositioning>)bar
{
return UIBarPositionTopAttached;
}
positionForBar は、ナビゲーションバーに、背景をステータスバーの上方に拡張するかどうかを指示します。
ここで私の答えを参照してください、私は便宜のために以下のコンテンツをコピーしました:
https://stackoverflow.com/a/18912291/1162959
私が見つけた最も簡単な回避策は、表示したいView ControllerをNavigation Controller内にラップしてから、そのNavigation Controllerを表示することです。
MyViewController *vc = [MyViewController new];
UINavigationController *nav = [[UINavigationController alloc]
initWithRootViewController:vc];
[self presentViewController:nav animated:YES completion:NULL];
この 技術ノート (ステータスバーがビューをカバーしないようにする)に従って、自動レイアウトを使用してこの問題を解決できます。
抜粋を次に示します。
最上部のビューに垂直スペース制約を追加します
- UIToolbarから「Top Layout Guide」へのドラッグを制御します
- ポップオーバーで、「垂直間隔」を選択します
- 「垂直空間制約」定数を0(ゼロ)に変更します
UIToolbarの下に他のサブビューがある場合は、それらのビューをTop Layout Guideではなくツールバーに固定します
これにより、ios6およびios7がサポートされます。
私はあきらめて、x xibベースでnavbarの高さの制約を64に設定しなければなりませんでしたVC iPadのアプリでは、ビューの上部に20ピクセルが無駄になります(ステータスバーはiPhoneシミュレーションウィンドウとは別であるため)
IOSバージョンのサイズ620x128の画像を提供することにより、ナビゲーションバーの高さを増やして管理することもできます。そして、この画像はで使用されます:
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)?YES:NO) {
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"newImage.png"] forBarMetrics:UIBarMetricsDefault];
}else{
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"previousImage.png"] forBarMetrics:UIBarMetricsDefault];
}