我知道如何更改 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]];
,但无法正常工作,并且在应用委托中的任何地方都找不到代码。
谁能指出我正确的方向?
您可以使用 [[UINavigationBar appearance] setTintColor:myColor];
从 iOS 7 开始,您需要设置 [[UINavigationBar appearance] setBarTintColor:myColor];
和 [[UINavigationBar appearance] setTranslucent:NO]
。
[[UINavigationBar appearance] setBarTintColor:myColor];
[[UINavigationBar appearance] setTranslucent:NO];
要更改背景颜色而不是色调,以下代码将起作用:
[self.navigationController.navigationBar setBarTintColor:[UIColor greenColor]];
[self.navigationController.navigationBar setTranslucent:NO];
UIViewControllers
生效,而此答案将在调用时显示效果。
在 iOS 7 中执行此操作:
[[UINavigationBar appearance] setBarTintColor:myColor];
斯威夫特语法:
UINavigationBar.appearance().barTintColor = UIColor.whiteColor() //changes the Bar Tint Color
我只是把它放在 AppDelegate didFinishLaunchingWithOptions 中,它在整个应用程序中持续存在
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
}
https://i.stack.imgur.com/N2rtJ.png
UINavigationBar外观
迅速:
self.navigationController?.navigationBar.barTintColor = UIColor.red
self.navigationController?.navigationBar.isTranslucent = false
您可以使用 Xcode 6.3.1 轻松做到这一点。在文档大纲中选择您的 NavigationBar。选择属性检查器。取消选中半透明。将 Bar Tint 设置为您想要的颜色。完毕!
正如其他答案所提到的,您可以使用 setTintColor:
,但您需要纯色,并且无法设置色调颜色 AFAIK。
解决方案是以编程方式创建图像并通过 UIAppearance
将该图像设置为所有导航栏的背景图像。关于图像的大小,我不确定 1x1 像素的图像是否可以工作,或者您是否需要导航栏的确切大小。查看 this question 的第二个答案以了解如何创建图像。
作为建议,我不喜欢用这些类型的东西“重载”应用程序委托。我倾向于创建一个名为 AppearanceConfiguration
的类,其中只有一个公共方法 configureAppearance
,我在其中设置了我想要的所有 UIAppearance 内容,然后从应用程序委托调用该方法。
在 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
https://i.stack.imgur.com/DPadz.png
您可以在任何视图控制器中使用此代码设置 UINavigation 背景颜色
self.navigationController.navigationBar.backgroundColor = [UIColor colorWithRed:10.0f/255.0f green:30.0f/255.0f blue:200.0f/255.0f alpha:1.0f];
在 iOS 中处理 UINavigationController 和 UINavigationBar 很麻烦。好在有一个开源的第三方库可以轻松解决这些问题,希望对大家有所帮助。
Git 存储库:NXNavigationExtension
更改 UINavigationBar 颜色:
extension YourViewController {
override var nx_titleTextAttributes: [NSAttributedString.Key : Any]? {
return [NSAttributedString.Key.foregroundColor: .red]
}
}
📝 example
颜色代码是这里的问题。不要使用 195/255,而是使用 0.7647 或 195.f/255.f 问题是转换浮点数不能正常工作。尝试使用精确的浮点值。
tintColor
,渐变将保持不变。如果你不想有这个渐变,你需要继承你的 UINavigationBar 或者为外观制作一个 UIImage 。navigationBar.barTintColor = myColor;
translucent
属性。因此[[UINavigationBar appearance] setTranslucent:NO]
将导致应用程序崩溃并出现NSInvalidArgumentException
错误。使用[self.navigationController.navigationBar setTranslucent:NO]
或使用 IB 取消选择透明度。UINavigationBar.appearance().barTintColor = myColor
UINavigationBar.appearance().isTranslucent = false