39

ナビゲーション コントローラーでは、ナビゲーション バーの適切な色と位置が期待どおりに自動的に取得されます。

このような

ここに画像の説明を入力

しかし、モーダル ビューでは、ナビゲーション バーをドラッグすると、キャリア/バッテリー情報に近すぎる最上部に配置できます。

ここに画像の説明を入力

それを下にドラッグして、自動的に作成された位置とどこまで一致するかを推測できますが、色の不一致が生じます。IB でステータス バーの設定を変更しようとしましたが、違いはありません。

ここに画像の説明を入力

モーダル ビューを自動生成されたナビゲーション ビューのように見せるなど、これを克服する正しい方法はありますか。

ありがとう

4

8 に答える 8

82

iOS 7 でこれを克服する最善の方法は、新しいUIBarPositioningDelegateプロトコルに準拠することです。

NavigationBar のデリゲートをビュー コントローラーに接続し (ストーリーボードまたはコードを介して、ビュー コントローラーをナビゲーション バーのデリゲートとして設定します)、そのプロトコルに準拠し、メソッドを実装します。

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

ビューコントローラーのトップギャップを削除できます。バーを上端から 20 ポイント下に配置する必要があります

于 2014-01-07T09:11:42.653 に答える
27

この問題を解決するための 3 つのオプションを考え出しました。

オプション 1: ナビゲーション バーのサイズを変更する

float currentVersion = 7.0;
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= currentVersion) {
    // iOS 7
    self.navBar.frame = CGRectMake(self.navBar.frame.origin.x, self.navBar.frame.origin.y, self.navBar.frame.size.width, 64);
}

オプション 2: ステータス バーを非表示にする

たとえば、ステータスバーを非表示にするモーダルビューでは

このメソッドを追加

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

viewDidLoad に追加

float currentVersion = 7.0;

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= currentVersion) {
    [self prefersStatusBarHidden];
    [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
}
else {
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
}

ここで、モーダル ビューを閉じると、ステータス バーが元に戻ります。これをviewWillAppearに追加します

    float currentVersion = 7.0;

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= currentVersion) {
    [self prefersStatusBarHidden];
    [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
    NSLog(@"ios7");
}
else {
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
}

とこれですが、今回は NO を返します

- (BOOL)prefersStatusBarHidden
{
    return NO;
}

オプション 3: ナビ コントローラーに埋め込む

モーダル ビューを選択し、ナビゲーション コントローラーに埋め込むだけです。

ここに画像の説明を入力

于 2013-09-12T00:58:25.937 に答える
0

iOS 7でNavigation Barを数ピクセル下に移動しようと何度か試みた後、これが最終的にうまくいきました:

-(void)viewWillLayoutSubviews
{
    float iosVersion = 7.0;
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= iosVersion) {
        // iOS 7+
        CGRect viewFrame = self.view.frame;
        viewFrame.origin.y += 10;
        self.view.frame = viewFrame;
    }
}

また、コンテンツに合わせてステータス バーの色を調整しました。

-(UIStatusBarStyle)preferredStatusBarStyle{
    return UIStatusBarStyleLightContent;
}
于 2014-05-13T00:02:20.940 に答える
-7

「自動レイアウトを使用」をオフにすると、うまくいきました。

于 2013-09-16T11:57:01.443 に答える