iOS 7导航栏文本和箭头颜色


234

我想将导航栏的背景设置为黑色,并将其中的所有颜色设置为白色

因此,我使用了以下代码:

[[UINavigationBar appearance] setTitleTextAttributes:
     [NSDictionary dictionaryWithObjectsAndKeys:
      [UIColor whiteColor],
      NSForegroundColorAttributeName,
      [UIColor whiteColor],
      NSForegroundColorAttributeName,
      [NSValue valueWithUIOffset:UIOffsetMake(0, -1)],
      NSForegroundColorAttributeName,
      [UIFont fontWithName:@"Arial-Bold" size:0.0],
      NSFontAttributeName,
      nil]];

但是后退按钮的文字颜色箭头方向仍为默认蓝色
如何更改下图所示的颜色?

在此处输入图片说明


1
如果([[self.window responsesToSelector:@selector(setTintColor :)])self.window.tintColor = [UIColor whiteColor];请尝试在AppDelegate中尝试
Evgeniy S 2013年


有趣的是,您的代码对我来说很棒(只是想将文本颜色更改为白色)。谢谢!
William T. Mallard 2014年

您使用的蓝色是什么?看起来不错!
ebi 2015年

@ebi有些人不喜欢分享。只需使用颜色选择器将其挑选出来即可。或者....你去了:RGB:(
18,60,133

Answers:


753

UINavigationBariOS 7开始,某些属性的行为已更改。您可以在下面显示的图像中看到:

在此处输入图片说明


我想与您分享两个美丽的链接。有关更多详细信息,您可以通过以下链接:

  1. iOS 7 UI过渡指南
  2. 如何为iOS更新您的应用程序7

苹果文档barTintColor说:

除非您将半透明属性设置为NO,否则默认情况下此颜色为半透明。

样例代码:

self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
[self.navigationController.navigationBar 
 setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];
self.navigationController.navigationBar.translucent = NO;

我已经尝试过:self.nav.navigationBar.tintColor = [UIColor whiteColor]; self.nav.navigationBar.barTintColor = [UIColor colorWithRed:6.0 / 255.0绿色:12.0 / 255.0蓝色:19.0 / 255.0 alpha:1.0];但是一切仍然是蓝色的。
1310年

2
我之前读过,但是只更改了文本,而没有更改和箭头。它仍然是蓝色的:(
1310年

1
@ 1110:看看:使用色调颜色
Bhavin 2013年

2
@切尔西:这条线怎么样?:[self.navigationController.navigationBar setTitleTextAttributes:@{[UIFont fontWithName:@"YOURFONT" size:14], NSFontAttributeName}];
Bhavin

4
别忘了您可以在appDelegate中更改整个应用程序的色彩:[[UINavigationBar外观] setTintColor:[UIColor blackColor]];
simon_smiley 2015年

85

在此处输入图片说明

这花了我大约半天的时间才能弄清楚,但这对我有用。在用于初始化navigationController的rootViewController中,将以下代码放入viewDidAppear方法中:

//set bar color
[self.navigationController.navigationBar setBarTintColor:[UIColor colorWithRed:85.0/255.0 green:143.0/255.0 blue:220.0/255.0 alpha:1.0]];
//optional, i don't want my bar to be translucent
[self.navigationController.navigationBar setTranslucent:NO];
//set title and title color
[self.navigationItem setTitle:@"Title"];
[self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:UITextAttributeTextColor]];
//set back button color
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], UITextAttributeTextColor,nil] forState:UIControlStateNormal];
//set back button arrow color
[self.navigationController.navigationBar setTintColor:[UIColor whiteColor]];

我在这里的完整帖子


1
如果您在更改后退箭头的颜色时遇到问题,此代码段将解决此问题。至少,您需要将最后一行代码添加到实际的rootViewController中。
russ,

是的,约翰。昨天我也为此浪费了大约一个小时。一个问题(大问题)是文档指出所有可能的属性很糟糕。知道在哪里列出它们吗?TY。
Alex Zavatone 2013年

谢谢@john重叠了我的自定义颜色,您能解释一下为什么吗?
Vaibhav Limbani 2014年

我认为您应该提出一个新问题。除非我看到您的代码以及您在做什么,否则我无法告诉您原因。@MacGeek
John Riselvato 2014年

3
谢谢,它的工作:)。但是iOS 7中不推荐使用UITextAttributeTextColor,现在您应该使用NSForegroundColorAttributeName
YYamil 2015年

37

Swift3,iOS 10

要全局分配颜色,请在AppDelegate中didFinishLaunchingWithOptions

let textAttributes = [NSForegroundColorAttributeName:UIColor.white]
UINavigationBar.appearance().titleTextAttributes = textAttributes

Swift 4,iOS 11

let textAttributes = [NSAttributedStringKey.foregroundColor:UIColor.white]
UINavigationBar.appearance().titleTextAttributes = textAttributes

21

Vin的回答对我很有用。这是使用Xamarin.iOS / MonoTouch的C#开发人员的相同解决方案:

var navigationBar = NavigationController.NavigationBar; //or another reference
navigationBar.BarTintColor = UIColor.Blue;
navigationBar.TintColor = UIColor.White;
navigationBar.SetTitleTextAttributes(new UITextAttributes() { TextColor = UIColor.White });
navigationBar.Translucent = false;

不知道您可以通过这种方式设置SetTitleTextAttributes。
布拉德·摩尔

12

斯威夫特/ iOS8

let textAttributes = NSMutableDictionary(capacity:1)
textAttributes.setObject(UIColor.whiteColor(), forKey: NSForegroundColorAttributeName)
navigationController?.navigationBar.titleTextAttributes = textAttributes

3
现在,让textAttributes = NSMutableDictionary(capacity:1)是对NSMutableDictionary初始化的正确调用。
juliensaad 2014年

12
[[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];

1
我喜欢这种方法,因为您可以在AppDelegate本身中进行设置,并且它使用Appearance代理。
Niyog Ray 2015年

8

UINavigationBar以正确的方式更改标题的颜色,请使用以下代码:

[self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:UITextAttributeTextColor]];

UITextAttributeTextColor在最新的ios 7版本中已弃用。使用NSForegroundColorAttributeName代替。


5

如果要更改标题文本的大小文本颜色,则必须更改NSDictionary titleTextAttributes,以更改其两个对象:

    self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"Arial" size:13.0],NSFontAttributeName,
                                                                  [UIColor whiteColor], NSForegroundColorAttributeName, 
                                                                  nil];

2

我认为先前的答案是正确的,这是做同一件事的另一种方式。我在这里与他人分享,以防万一它对某人有用。这是在ios7中更改导航栏的文本/标题颜色的方法:

UIColor *red = [UIColor colorWithRed:254.0f/255.0f green:0.0f/255.0f blue:0.0f/255.0f alpha:1.0];
NSMutableDictionary *navBarTextAttributes = [NSMutableDictionary dictionaryWithCapacity:1];
[navBarTextAttributes setObject:red forKey:NSForegroundColorAttributeName ];
self.navigationController.navigationBar.titleTextAttributes = navBarTextAttributes;

1

似乎Accessibility控件中的控件iOS Settings几乎覆盖了您尝试按颜色对导航栏按钮所做的所有操作。确保将所有设置都恢复到默认位置(将对比度,粗体,按钮形状等设置为关闭),否则您将看不到任何更改。完成操作后,所有颜色更改代码均按预期开始工作。您可能不需要关闭所有功能,但是我没有进一步介绍。


我到底发生了什么 打开“粗体”时,我无法更改条形按钮项目的颜色。这是不好的。现在,我将不得不使用图形:-(
肯(Ken)

0

Swift 5 / iOS 13

要在控制器中更改标题的颜色:

UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
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.