web-dev-qa-db-ja.com

iOS 7 |ステータスバーに非常に近いナビゲーションバー/ツールバーボタン

ナビゲーションバーまたはツールバー(ストーリーボード)をView Controllerにドラッグすると問題が発生します。

UINavigationBar:

UINavigationBar

上の画像でわかるように、右側のボタンはステータスバーにほぼ重なっています。

UIToolbarでも同じことが起こります:

UIToolbar

このView Controllerはモーダルとして使用することを目的としているため、UINavigationControllerを使用していません。

別のセクションでは、UINavigationControllerを使用していますが、期待どおりに表示されます。

UINavigationController

INavigationBar/UIToolbarをステータスバーと重ならないようにView Controllerにドラッグするにはどうすればよいですか?

41
Axort

ナビゲーションバーまたはツールバーは(0、viewController.topLayoutGuide.lengthUIBarPositionTopAttachedのバーの配置。ナビゲーションバーまたはツールバーのデリゲートをView Controllerに設定し、UIBarPositionTopAttachedを返す必要があります。正しく配置されていれば、3番目の画像に結果が表示されます。

詳細はこちら: https://developer.Apple.com/documentation/uikit/uibarpositioningdelegate?language=objc

48
Leo Natan

これらの手順を実行します

NavigationBarをXibのViewControllerにドラッグし、ViewControllerをデリゲートとして設定します。 NavigationBarは(0、20)にあることに注意してください

ViewControllerで、UINavigationBarDelegateに準拠します

@interface ETPViewController () <UINavigationBarDelegate>

このメソッドを実装する

- (UIBarPosition)positionForBar:(id <UIBarPositioning>)bar
{
    return UIBarPositionTopAttached;
}

positionForBar は、ナビゲーションバーに、背景をステータスバーの上方に拡張するかどうかを指示します。

25
onmyway133

ここで私の答えを参照してください、私は便宜のために以下のコンテンツをコピーしました:

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];

利点:

  • フレームをいじる必要はありません。
  • 同じコードがiOS 6とiOS 7で機能します。
  • 他の回避策よりもLessくない。

短所:

  • おそらく、XIBのナビゲーションバーまたはツールバーを空のままにして、UIBarButtonItemsをナビゲーションバーにプログラムで追加することをお勧めします。幸いなことに、これは非常に簡単です。
9
bobics

この 技術ノート (ステータスバーがビューをカバーしないようにする)に従って、自動レイアウトを使用してこの問題を解決できます。

抜粋を次に示します。

最上部のビューに垂直スペース制約を追加します

  • UIToolbarから「Top Layout Guide」へのドラッグを制御します
  • ポップオーバーで、「垂直間隔」を選択します
  • 「垂直空間制約」定数を0(ゼロ)に変更します

UIToolbarの下に他のサブビューがある場合は、それらのビューをTop Layout Guideではなくツールバーに固定します

これにより、ios6およびios7がサポートされます。

5
David

私はあきらめて、x xibベースでnavbarの高さの制約を64に設定しなければなりませんでしたVC iPadのアプリでは、ビューの上部に20ピクセルが無駄になります(ステータスバーはiPhoneシミュレーションウィンドウとは別であるため)

0
Anton Tropashko

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];
}
0
Utkarsh Goel