92

我知道如何更改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]];了,但我不工作,我无法在应用程序委托的任何地方找到代码。

谁能指出我正确的方向?

4

12 回答 12

204

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

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

[[UINavigationBar appearance] setBarTintColor:myColor];
[[UINavigationBar appearance] setTranslucent:NO];
于 2013-06-09T22:19:32.690 回答
106

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

[self.navigationController.navigationBar setBarTintColor:[UIColor greenColor]];
[self.navigationController.navigationBar setTranslucent:NO];
于 2013-11-17T17:31:44.427 回答
19

在 iOS 7 中执行此操作:

[[UINavigationBar appearance] setBarTintColor:myColor];
于 2014-01-13T11:49:32.947 回答
16

斯威夫特语法:

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

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

于 2015-02-13T16:07:30.030 回答
8

斯威夫特

self.navigationController?.navigationBar.barTintColor = UIColor.red
self.navigationController?.navigationBar.isTranslucent = false
于 2018-02-28T11:26:15.647 回答
7

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
}

导航栏

于 2021-07-06T17:09:39.570 回答
6

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

于 2015-04-26T18:58:57.963 回答
3

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

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

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

于 2013-06-09T22:37:01.073 回答
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];
于 2015-08-18T06:58:29.707 回答
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

在此处输入图像描述

于 2019-03-28T06:24:43.820 回答
0

在 iOS 中处理 UINavigationController 和 UINavigationBar 很麻烦。好在有一个开源的第三方库可以轻松解决这些问题,希望对大家有所帮助。

Git 存储库:NXNavigationExtension

更改 UINavigationBar 颜色:

extension YourViewController {
    
    override var nx_titleTextAttributes: [NSAttributedString.Key : Any]? {
        return [NSAttributedString.Key.foregroundColor: .red]
    }
    
}

例子

于 2021-11-13T15:42:44.813 回答
-1

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

于 2016-11-21T15:35:58.127 回答