如何从AppDelegate更改UINavigationBar背景颜色

时间:2013-06-09 22:17:05

标签: ios objective-c cocoa-touch uinavigationbar

我知道如何通过执行

来更改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]];,但我无法工作,我无法找到适用于app委托的任何地方的代码。

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

11 个答案:

答案 0 :(得分:194)

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

自iOS 7起,您需要设置[[UINavigationBar appearance] setBarTintColor:myColor];[[UINavigationBar appearance] setTranslucent:NO]

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

答案 1 :(得分:100)

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

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

答案 2 :(得分:17)

在iOS 7中执行此操作:

[[UINavigationBar appearance] setBarTintColor:myColor];

答案 3 :(得分:13)

Swift语法:

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

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

答案 4 :(得分:6)

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

答案 5 :(得分:5)

<强>夫特

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

答案 6 :(得分:3)

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

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

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

答案 7 :(得分: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];

答案 8 :(得分:1)

iOS 13.0 为此引入了新的 API:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    let myColor = UIColor(hue: 0.4, saturation: 0.25, brightness: 1, alpha: 1)
    
    let barAppearance = UINavigationBarAppearance()
    barAppearance.backgroundColor = myColor

    let navigationBar = UINavigationBar.appearance()
    navigationBar.standardAppearance = barAppearance
    navigationBar.scrollEdgeAppearance = barAppearance // for scrollable content or large titles
    
    return true
}

navigation bar

答案 9 :(得分: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

答案 10 :(得分:-1)

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