如何从AppDelegate更改UINavigationBar背景颜色


90

我知道如何通过更改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]];但是我无法正常工作,而且在应用程序委托中任何可以正常工作的地方都找不到代码。

有人能指出我正确的方向吗?

Answers:


202

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

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

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

谢谢,您知道如何删除顶部的白色默认渐变使其成为纯色吗?
乔纳森·瑟夫

1
随着tintColor梯度将停留。如果不想使用此渐变,则需要将UINavigationBar子类化,或者为外观创建UIImage。
塞卜·蒂博

59
在无法正常工作的iOS 7上,我不得不使用navigationBar.barTintColor = myColor;
Juan de la Torre

4
translucent属性只能在iOS 6和iOS 7中使用UIAppearance设置。因此[[UINavigationBar appearance] setTranslucent:NO]将导致应用程序崩溃并显示NSInvalidArgumentException错误。使用[self.navigationController.navigationBar setTranslucent:NO]IB 使用或取消选择透明度。
山姆

1
迅捷版本: UINavigationBar.appearance().barTintColor = myColor UINavigationBar.appearance().isTranslucent = false
fl034

103

要更改背景颜色而不更改颜色,下面的代码将起作用:

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

3
这应该是公认的答案,非常适合iOS7。
joshuahornby14年

针对iOS 7的正确答案。为我工作。
LondonGuy 2014年

半透明是完成这项工作的要求。由于接受的答案不包括该答案,因此应为接受的答案。
Tristan Warner-Smith

3
为了明确起见,可接受的答案是针对AppDelegate的,而这是针对View Controller中的。
院长

@Dean是正确的。接受的答案将对新创建的生效UIViewControllers,而此答案将在每次调用时显示效果。
aramusss 2015年


15

Swift语法:

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

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


8

斯威夫特

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

6

您可以使用Xcode 6.3.1轻松地做到这一点。在文档大纲中选择您的NavigationBar。选择属性检查器。取消选中半透明。将“ Bar Tint”设置为所需的颜色。做完了!


谢谢,我在ObjC中迅速找到了许多有关如何执行此操作的参考,但是没有人提到IB中可用的方法
Nick

3

正如其他答案所提到的,您可以使用setTintColor:,但是您想要纯色,并且无法设置色调AFAIK。

解决方案是通过编程创建图像,然后通过将该图像设置为所有导航栏的背景图像UIAppearance。关于图像的大小,我不确定1x1像素的图像是否可用,或者您是否需要导航栏的确切大小。请查看此问题的第二个答案以查看如何创建图像。

作为建议,我不喜欢用这些类型的东西“重载”应用程序委托。我倾向于做的事情是创建一个AppearanceConfiguration仅用一个公共方法命名的类,在该类configureAppearance中设置所需的所有UIAppearance内容,然后从应用程序委托中调用该方法。


2

您可以通过在任何视图控制器中使用此代码来设置UINavigation背景色

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

2

在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

在此处输入图片说明


-1

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.