55

アプリケーション全体で UINavigationBar の透過性を無効にする方法はありますか?

を使用[self.navigationController.navigationBar setTranslucent:NO]すると、単一のコントローラーでこの問題を解決できることはわかっていますが、アプリケーションに多数の UINavigationBars があり、これはかなり面倒な解決策です。

試してみまし[[UINavigationBar appearance] setTranslucent:NO]たが、その機能は驚くほどサポートされていません。そうすることで、Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** Illegal property type, c for appearance setter, _installAppearanceSwizzlesForSetter:'

必要に応じて、アプリ全体で UINavigationBars を設定して半透明性を 1 つずつ無効にすることができますが、この問題にはもっと洗練された解決策が必要です...

4

9 に答える 9

33

スタック内の最初のナビゲーション バーの半透明度を に設定すると、false [self.navigationController.navigationBar setTranslucent:NO]そのスタックにプッシュされる後続のすべての NavigationViewController に反映されます。

于 2013-10-24T14:48:46.867 に答える
19

このスタイリングをアプリ全体に適用する場合の Swift ソリューションを次に示します。

クラスでAppDelegateこれをに追加しますdidFinishLaunchingWithOptions

スウィフト 2 の場合:

UINavigationBar.appearance().translucent = false

Swift 3 以降の場合:

UINavigationBar.appearance().isTranslucent = false
于 2016-07-25T10:52:57.310 に答える
8

このコードを使用すると非常に簡単に見えますappDelegate didFinishLaunchingWithOptions(iOS 8以降のバージョンで正常に動作します)

[[UINavigationBar appearance] setTranslucent:NO];
于 2015-08-12T04:29:19.943 に答える
3

誰かがまだこれと戦っている場合に備えて、これを追加します。

ただし、存在しない画像を指定することでだますことができます。これにより、ツールバーを含むナビゲーションバーが不透明になります

[[UIToolbar appearance] setBackgroundColor:[UIColor colorWithRed:219.0/255.0 green:67.0/255.0 blue:67.0/255.0 alpha:1.0]];

[[UIToolbar appearance] setBackgroundImage:[[UIImage alloc] init] forToolbarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];
于 2013-11-05T17:20:05.867 に答える
2

これが古いことは知っていますが、誰かにとっては便利かもしれません。

カテゴリを使用して、その中で*プロパティを設定できます[translucent][1]

@implementation UINavigationBar (MakeTranslucent)

-(void)willMoveToWindow:(UIWindow *)newWindow {
    [super willMoveToWindow:newWindow];


    self.translucent = NO;
}
@end
  • 私は willMoveToWindow を使用しましたが、これでよいかどうかわからないので UAYOR.
于 2014-10-04T20:08:40.930 に答える
1

UIKit コード ドキュメントからの抜粋を参照してください。

/*
     New behavior on iOS 7.
     Default is YES.
     You may force an opaque background by setting the property to NO.
     If the navigation bar has a custom background image, the default is inferred 
     from the alpha values of the image—YES if it has any pixel with alpha < 1.0
     If you send setTranslucent:YES to a bar with an opaque custom background image
     it will apply a system opacity less than 1.0 to the image.
     If you send setTranslucent:NO to a bar with a translucent custom background image
     it will provide an opaque background for the image using the bar's barTintColor if defined, or black
     for UIBarStyleBlack or white for UIBarStyleDefault if barTintColor is nil.
     */

正しいSwift 4ソリューションは

UINavigationBar.appearance().isTranslucent = false
UINavigationBar.appearance().backgroundColor = .white
于 2018-10-08T14:56:04.037 に答える
0

外観 API は、ナビゲーション バーの半透明プロパティをサポートしていないと思います。しかし、このようにアプリ全体に対してこれを行うことができます。このコードを見てください -

ここでメニュー画面はルート ビュー コントローラーです。

MenuScreen *ms = [[MenuScreen alloc]initWithNibName:@"MenuScreen" bundle:nil];

UINavigationController *nv = [[UINavigationController alloc]initWithRootViewController:ms];

//This will set property for whole App.
[nv.navigationBar setTranslucent:NO];

self.window.rootViewController = nv ;
于 2013-12-19T06:24:27.600 に答える