如何从AppDelegate更改UINavigationBar背景颜色

问题描述 投票:84回答:10

我知道如何改变UINavigationBar背景图像

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"nabbar"] forBarMetrics:UIBarMetricsDefault];

而且我知道如何在每个Views中将条形设置为不同的颜色.....现在我想改变背景颜色而不使用app delegate的纯色图像。我不想每次从每个视图设置它,我不想写一个CGRect

我尝试了[[UINavigationBar appearance] setBackgroundColor:[UIColor colorWithRed:33/255.0 green:34/255.0 blue:36/255.0 alpha:1.0]];,但我没有工作,我无法在应用程序委托中的任何地方找到代码。

有谁能请我指出正确的方向?

ios objective-c cocoa-touch uinavigationbar
10个回答
196
投票

你可以使用[[UINavigationBar appearance] setTintColor:myColor];

从iOS 7开始,你需要设置[[UINavigationBar appearance] setBarTintColor:myColor];[[UINavigationBar appearance] setTranslucent:NO]

[[UINavigationBar appearance] setBarTintColor:myColor];
[[UINavigationBar appearance] setTranslucent:NO];

-1
投票

颜色代码是这里的问题。而不是使用195/255,使用0.7647或195.f / 255.f问题是转换浮动不能正常工作。尝试使用精确浮点值。


101
投票

要更改背景颜色而不是色调,以下代码将起作用:

[self.navigationController.navigationBar setBarTintColor:[UIColor greenColor]];
[self.navigationController.navigationBar setTranslucent:NO];

18
投票

要在iOS 7中执行此操作:

[[UINavigationBar appearance] setBarTintColor:myColor];

14
投票

Swift语法:

    UINavigationBar.appearance().barTintColor = UIColor.whiteColor() //changes the Bar Tint Color

我只是把它放在AppDelegate didFinishLaunchingWithOptions中,它在整个应用程序中都存在


6
投票

您可以使用Xcode 6.3.1轻松完成此操作。在文档大纲中选择导航栏。选择“属性”检查器。取消选中半透明。将Bar Tint设置为所需的颜色。完成!


5
投票

迅速:

self.navigationController?.navigationBar.barTintColor = UIColor.red
self.navigationController?.navigationBar.isTranslucent = false

3
投票

正如其他答案所提到的,你可以使用setTintColor:,但你想要一个纯色,并且不可能设置色调颜色AFAIK。

解决方案是以编程方式创建图像,并通过UIAppearance将该图像设置为所有导航栏的背景图像。关于图像的大小,我不确定1x1像素图像是否可行或者您是否需要导航栏的确切大小。检查this question的第二个答案以了解如何创建图像。

作为一个建议,我不喜欢用这些类型的东西“重载”应用程序委托。我倾向于创建一个名为AppearanceConfiguration的类,只有一个公共方法configureAppearance,我设置了我想要的所有UIAppearance,然后我从app delegate调用该方法。


2
投票

您可以在任何视图控制器中使用此代码来设置导航背景颜色

self.navigationController.navigationBar.backgroundColor = [UIColor colorWithRed:10.0f/255.0f green:30.0f/255.0f blue:200.0f/255.0f alpha:1.0f];

0
投票

在Swift 4.2和Xcode 10.1中

您可以将AppDelegate中的导航栏颜色直接更改为整个项目。

didFinishLaunchingWithOptions launchOptions:中写下以下代码行

UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().barTintColor = UIColor(red: 2/255, green: 96/255, blue: 130/255, alpha: 1.0)

这里

tintColor用于设置背景图像,如后退按钮和菜单行图像等。(见下左右菜单图像)

barTintColor用于导航栏背景颜色

如果要设置特定的视图控制器导航栏颜色,请在viewDidLoad()中写下以下代码

//Add navigation bar colour
navigationController?.navigationBar.barTintColor = UIColor(red: 2/255, green: 96/255, blue: 130/255, alpha: 1.0)
navigationController?.navigationBar.tintColor = UIColor.white

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.