10

私はナビゲーション コントローラーを使用しており、スタイルを次のように設定しています。

navController.navigationBar.barStyle = UIBarStyleBlackTranslucent;

しかし、プログラムを実行すると、ナビゲーション コントローラーが私の背景ではなく、白い背景の上にあるように見えます。コントローラーを左または右に押すと、現在のすべてのビューが、ナビゲーション バーのサイズとまったく同じサイズで上部に移動します。そして、ナビゲーション コントローラー バーから自分の背景を確認できる場所です。何か案は?私の barStyle が不透明に設定されている場合、すべてがうまく見えます。ビュー フレームを負の 'y' 値に設定することを考えていましたが、もっとエレガントな方法があるはずです。

4

12 に答える 12

10

UINavigationController は、コントローラーのビュー フレームにナビゲーション バーの下の領域が含まれていないと想定していると思います。

UIBarStyleBlackTranslucent は UIToolbar で使用されることが多いため、Apple はおそらく UINavigationBar で簡単に使用できるようにしませんでした。バー領域の下で確実にレンダリングしたい場合は、おそらく UINavigationController を放棄するか、フレームのハッキングを開始する必要があります (回転には注意してください)。

また、ナビゲーション バーを数秒後に非表示にすることを意図している場合は、(モバイル Safari のように) 上にスライドさせようとする代わりに、(写真アプリのように) フェードアウトさせる方がはるかに簡単です。それを信じてください...それは私が難しい方法を学ぶのに多くの時間を要しました.

于 2008-10-23T02:30:26.457 に答える
7

透明な背景画像を使用し、translucent = YES を使用して、コンテンツがバーの下に流れるようにします。iOS 5 / 6 で動作します。viewDidLoad に追加します。

self.navigationController.navigationBar.translucent = YES;
UIImage * backgroundImage = [UIImage imageNamed:@"spacer.gif"];
[self.navigationController.navigationBar setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:UIBarMetricsDefault];

ここに、単一の 1px x 1px の透明な画像、spacer.gif 画像を添付しました。

スペーサー.gif

于 2012-12-11T10:30:10.447 に答える
4
self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:0.169 green:0.373 blue:0.192 alpha:0.9];
self.navigationController.navigationBar.translucent = YES;

ノート:

  1. 使用しないself.navigationBarStyleself.navigationBarTintColor、変更してください。
  2. 最後の 2 つのステートメントを に追加しますviewDidLoad
于 2012-08-29T07:43:23.303 に答える
3

私はこの同じ問題に遭遇しました (3.1.3 で)。navigationBar が既にセットアップされた後にバーのスタイルを設定することはできませんが、いつでも好きなときに tintColor と半透明の値を設定できます。

    self.navigationController.navigationBar.tintColor = [UIColor blackColor];
    self.navigationController.navigationBar.translucent = YES;

「blackTranslucent」バーを作成します。特定のビュー コントローラーをスタックにプッシュすると、navigationBar の外観が変更されます。

于 2010-05-20T17:45:05.040 に答える
2

同じ問題があり、ルートビューの背景を自分のビューと同じにすることで解決しました。ナビゲーションバーの後ろの白い領域がルートビューであることがわかりました。

于 2008-10-23T20:46:33.967 に答える
1

これを使ってみてください、それは役に立つかもしれません。

_topToolBar.barStyle = UIBarStyleBlackTranslucent;
_topToolBar.alpha = 0.3;
于 2010-10-20T15:44:15.770 に答える
1

私は同じ問題を抱えていました.解決しました!

ImageViewExtendController *detailImageController = [[ImageViewExtendController alloc] init];  
[detailImageController loadImage:url];
[self.navigationController pushViewController:detailImageController animated:YES];
于 2010-11-09T10:14:44.853 に答える
1

ナビゲーション コントローラーは、すべてのサブビューの座標系をオフセットして、ナビゲーション バーの下に描画します。

ビューのフレームを負の y ドメインに拡張して、ナビゲーション バーの下に描画します。

于 2008-10-23T03:08:09.563 に答える
1

すべてを正しくオフセットするには、info.plist ファイルに barstyle を設定する必要があります。

ただし、2.1 f/w がリリースされてから試していませんでしたが、2.0 でこれを試したときに、縦から横に回転した後に設定が失われることがわかりました。

于 2008-10-28T18:15:42.500 に答える
0

アプリデリゲートでナビゲーションコントローラーのnavigationBarを十分に早い段階で透明に設定すると(navコントローラーをウィンドウに追加する前に機能しました)、ナビゲーションバーの下でビューが自動的に上に移動します。

残念ながら、ステータスバーの下のビューもシフトしません。残念ながら、独自のバージョンのUINavigationControllerを実装する必要があるようです。幸い、UINavigationBarはかなり再利用可能であるため、それほど悪くはありません。

于 2008-10-23T16:08:04.997 に答える
0

これを試して:

self.tabBarController.tabBar.superview.backgroundColor = [UIColor blackColor];
于 2010-11-18T09:01:25.987 に答える