iPhone导航栏标题文字颜色

看起来iOS导航栏的标题颜色默认是白色的。 有没有办法把它改成不同的颜色?

我知道使用图像的navigationItem.titleView方法。 由于我的devise技巧是有限的,我没有得到标准的光面,我更喜欢改变文字的颜色。

任何有识之士将不胜感激。

现代的做法

现代的方式,整个导航控制器…做一次,当你的导航控制器的根视图加载。

 [self.navigationController.navigationBar setTitleTextAttributes: @{NSForegroundColorAttributeName:[UIColor yellowColor]}]; 

但是,这在后续的观点中似乎没有效果。

经典的做法

旧的方式,每个视图控制器(这些常量是为iOS 6,但如果想要在iOS 7外观的每个视图控制器做它,你将需要相同的方法,但具有不同的常量):

您需要使用UILabel作为navigationItemtitleView

标签应该:

  • 有一个清晰的背景色( label.backgroundColor = [UIColor clearColor] )。
  • 使用粗体label.font = [UIFont boldSystemFontOfSize: 20.0f]系统字体( label.font = [UIFont boldSystemFontOfSize: 20.0f] )。
  • 有50%alpha的黑色阴影( label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5] )。
  • 您还需要将文本alignment设置为居中( label.textAlignment = NSTextAlignmentCenter (旧SDK的UITextAlignmentCenter ))。

将标签的文字颜色设置为任何您想要的自定义颜色。 你需要一种不会导致文本混合到阴影中的颜色,这很难阅读。

我通过反复试验来解决这个问题,但是我提出的价值观对于他们来说最终都不是苹果公司所挑选的。 🙂

如果你想validation这一点,请将这段代码放到Apple NavBar示例的 PageThreeViewController.minitWithNibName:bundle:中。 这将用黄色标签replace文本。 除了颜色之外,这应该与Apple的代码生成的原始代码不可区分。

 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // this will appear as the title in the navigation bar UILabel *label = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease]; label.backgroundColor = [UIColor clearColor]; label.font = [UIFont boldSystemFontOfSize:20.0]; label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5]; label.textAlignment = NSTextAlignmentCenter; // ^-Use UITextAlignmentCenter for older SDKs. label.textColor = [UIColor yellowColor]; // change this color self.navigationItem.titleView = label; label.text = NSLocalizedString(@"PageThreeTitle", @""); [label sizeToFit]; } return self; } 

编辑:另外,请阅读下面的Erik B的答案。 我的代码显示的效果,但他的代码提供了一个更简单的方法,把它放在现有的视图控制器。

我知道这是一个非常古老的线程,但我认为这对于知道新用户iOS 5为build立标题属性带来一个新属性将是有用的。

您可以使用UINavigationBar的setTitleTextAttributes设置字体,颜色,偏移量和阴影颜色。

另外,您可以在整个应用程序中为所有UINavigationBars设置相同的默认UINavigationBar标题文本属性。

比如像这样:

 NSDictionary *navbarTitleTextAttributes = [NSDictionary dictionaryWithObjectsAndKeys: [UIColor whiteColor],UITextAttributeTextColor, [UIColor blackColor], UITextAttributeTextShadowColor, [NSValue valueWithUIOffset:UIOffsetMake(-1, 0)], UITextAttributeTextShadowOffset, nil]; [[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes]; 

在iOS 5中,您可以通过以下方式更改navigationBar标题颜色:

 navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor yellowColor]}; 

根据Steven Fisher的回答,我写了这样一段代码:

 - (void)setTitle:(NSString *)title { [super setTitle:title]; UILabel *titleView = (UILabel *)self.navigationItem.titleView; if (!titleView) { titleView = [[UILabel alloc] initWithFrame:CGRectZero]; titleView.backgroundColor = [UIColor clearColor]; titleView.font = [UIFont boldSystemFontOfSize:20.0]; titleView.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5]; titleView.textColor = [UIColor yellowColor]; // Change to desired color self.navigationItem.titleView = titleView; [titleView release]; } titleView.text = title; [titleView sizeToFit]; } 

这个代码的优点,除了正确处理框架,是如果你改变你的控制器的标题自定义标题视图也将得到更新。 无需手动更新。

另一个很大的优点是它使得启用自定义标题颜色变得非常简单。 所有你需要做的就是把这个方法添加到控制器。

以上大部分build议现在都弃用了,对于iOS 7的使用 –

 NSDictionary *textAttributes = [NSDictionary dictionaryWithObjectsAndKeys: [UIColor whiteColor],NSForegroundColorAttributeName, [UIColor whiteColor],NSBackgroundColorAttributeName,nil]; self.navigationController.navigationBar.titleTextAttributes = textAttributes; self.title = @"Title of the Page"; 

此外,检查可以设置的各种文本属性的NSAttributedString.h。

在IOS 7和8中,可以将标题的颜色更改为绿色

 self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObject:[UIColor greenColor] forKey:NSForegroundColorAttributeName]; 

为了使问题保持​​最新,我将添加Alex RR解决scheme,但在Swift中

 self.navigationController.navigationBar.barTintColor = .blueColor() self.navigationController.navigationBar.tintColor = .whiteColor() self.navigationController.navigationBar.titleTextAttributes = [ NSForegroundColorAttributeName : UIColor.whiteColor() ] 

其结果是:

在这里输入图像描述

tewha的解决scheme运作良好,如果你想改变页面的颜色,但我想能够改变每一页的颜色。 我做了一些小的修改,以便它可以在UINavigationController上的所有页面上工作

NavigationDelegate.h

 //This will change the color of the navigation bar #import <Foundation/Foundation.h> @interface NavigationDelegate : NSObject<UINavigationControllerDelegate> { } @end 

NavigationDelegate.m

 #import "NavigationDelegate.h" @implementation NavigationDelegate - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{ CGRect frame = CGRectMake(0, 0, 200, 44);//TODO: Can we get the size of the text? UILabel* label = [[[UILabel alloc] initWithFrame:frame] autorelease]; label.backgroundColor = [UIColor clearColor]; label.font = [UIFont boldSystemFontOfSize:20.0]; label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5]; label.textAlignment = UITextAlignmentCenter; label.textColor = [UIColor yellowColor]; //The two lines below are the only ones that have changed label.text=viewController.title; viewController.navigationItem.titleView = label; } @end 

从iOS 5开始,我们必须使用titleTextAttribute Dictionary(UInavigation控制器类引用中的预定义字典)来设置标题文本颜色和导航栏的字体。

  [[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys: [UIColor blackColor],UITextAttributeTextColor, [UIFont fontWithName:@"ArialMT" size:16.0], UITextAttributeFont,nil]]; 

方法1 ,在IB中设置:

在这里输入图像描述

方法2 ,一行代码:

 navigationController?.navigationBar.barTintColor = UIColor.blackColor() 

在任何视图控制器的viewDidLoad或viewWillAppear方法中使用下面的代码。

 - (void)viewDidLoad { [super viewDidLoad]; //I am using UIColor yellowColor for an example but you can use whatever color you like self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor yellowColor]}; //change the title here to whatever you like self.title = @"Home"; // Do any additional setup after loading the view. } 

简短而甜蜜。

 [[[self navigationController] navigationBar] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor redColor]}]; 

Swift版本

我发现你们大多数人提出了Objective_C版本的答案

我想通过使用Swift来为需要的人实现这个function。

在ViewDidload中

1.使NavigationBar背景变为颜色(例如:BLUE)

 self.navigationController?.navigationBar.barTintColor = UIColor.blueColor() 

2.使NavigationBar背景变成Image(例如:ABC.png)

 let barMetrix = UIBarMetrics(rawValue: 0)! self.navigationController?.navigationBar .setBackgroundImage(UIImage(named: "ABC"), forBarMetrics: barMetrix) 

3.要更改NavigationBar标题(例如:[Font:Futura,10] [Color:Red])

 navigationController?.navigationBar.titleTextAttributes = [ NSForegroundColorAttributeName : UIColor.redColor(), NSFontAttributeName : UIFont(name: "Futura", size: 10)! ] 

(提示1:不要忘记UIFont之后的“!”标记)

(提示2:标题文本有很多属性,命令点击“NSFontAttributeName”就可以进入这个类并查看keyName和它们所需的对象types)

我希望我能帮忙!

这是基于史蒂文斯的解决scheme

只有真正的区别是我根据文字长度放置了一些调整位置,好像和苹果怎么做一样

 UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(([self.title length] < 10 ? UITextAlignmentCenter : UITextAlignmentLeft), 0, 480,44)]; titleLabel.backgroundColor = [UIColor clearColor]; titleLabel.font = [UIFont boldSystemFontOfSize: 20.0f]; titleLabel.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5]; titleLabel.textAlignment = ([self.title length] < 10 ? UITextAlignmentCenter : UITextAlignmentLeft); titleLabel.textColor = [UIColor redColor]; titleLabel.text = self.title; self.navigationItem.titleView = titleLabel; [titleLabel release]; 

您可能需要根据字体大小调整10值

我用我的导航button抛出文本中心(当你只有一个button)遇到问题。 为了解决这个问题,我只是改变了我的框架大小:

 CGRect frame = CGRectMake(0, 0, [self.title sizeWithFont:[UIFont boldSystemFontOfSize:20.0]].width, 44); 

我已经定制了导航条的背景图片和左边的button项目,灰色的标题不适合背景。 然后我使用:

 [self.navigationBar setTintColor:[UIColor darkGrayColor]]; 

将色彩颜色更改为灰色。 现在标题是白色的! 这就是我想要的。

希望也帮助:)

build议设置self.title,因为在推子导航栏或在标签栏上显示标题时使用。

 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // create and customize title view self.title = NSLocalizedString(@"My Custom Title", @""); UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero]; titleLabel.text = self.title; titleLabel.font = [UIFont boldSystemFontOfSize:16]; titleLabel.backgroundColor = [UIColor clearColor]; titleLabel.textColor = [UIColor whiteColor]; [titleLabel sizeToFit]; self.navigationItem.titleView = titleLabel; [titleLabel release]; } } 

这是一个相当古老的线程,但我想为iOS 7及以上版本提供设置导航栏标题的颜色,大小和垂直位置的答案

对于颜色和大小

  NSDictionary *titleAttributes =@{ NSFontAttributeName :[UIFont fontWithName:@"Helvetica-Bold" size:14.0], NSForegroundColorAttributeName : [UIColor whiteColor] }; 

垂直位置

 [[UINavigationBar appearance] setTitleVerticalPositionAdjustment:-10.0 forBarMetrics:UIBarMetricsDefault]; 

设置标题并分配属性字典

 [[self navigationItem] setTitle:@"CLUBHOUSE"]; self.navigationController.navigationBar.titleTextAttributes = titleAttributes; 

使用这样的方向支持

  UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,40)]; [view setBackgroundColor:[UIColor clearColor]]; [view setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight ]; UILabel *nameLabel = [[UILabel alloc] init]; [nameLabel setFrame:CGRectMake(0, 0, 320, 40)]; [nameLabel setBackgroundColor:[UIColor clearColor]]; [nameLabel setAutoresizingMask:UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin |UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin]; [nameLabel setTextColor:[UIColor whiteColor]]; [nameLabel setFont:[UIFont boldSystemFontOfSize:17]]; [nameLabel setText:titleString]; [nameLabel setTextAlignment:UITextAlignmentCenter]; [view addSubview:nameLabel]; [nameLabel release]; self.navigationItem.titleView = view; [view release]; 

设置标题的字体大小我已经使用以下条件..也许有用的任何人

 if ([currentTitle length]>24) msize = 10.0f; else if ([currentTitle length]>16) msize = 14.0f; else if ([currentTitle length]>12) msize = 18.0f; 

使用新的iOS 7文本属性和现代目标c更新Alex RR的post,减less噪音:

 NSShadow *titleShadow = [[NSShadow alloc] init]; titleShadow.shadowColor = [UIColor blackColor]; titleShadow.shadowOffset = CGSizeMake(-1, 0); NSDictionary *navbarTitleTextAttributes = @{NSForegroundColorAttributeName:[UIColor whiteColor], NSShadowAttributeName:titleShadow}; [[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes]; 

这是缺less的东西之一。 最好的办法是创build自己的自定义导航栏,添加一个文本框,并以这种方式操纵颜色。

遇到同样的问题(作为其他人)的标签,当我们在navBar中插入一个button时移动(在我的情况下,我有一个微调,我加载date时用一个buttonreplace),上述解决scheme不起作用对我来说,这里是一直工作和保持在同一个地方的标签:

 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // this will appear as the title in the navigation bar //CGRect frame = CGRectMake(0, 0, [self.title sizeWithFont:[UIFont boldSystemFontOfSize:20.0]].width, 44); CGRect frame = CGRectMake(0, 0, 180, 44); UILabel *label = [[[UILabel alloc] initWithFrame:frame] autorelease]; label.backgroundColor = [UIColor clearColor]; label.font = [UIFont boldSystemFontOfSize:20.0]; label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5]; label.textAlignment = UITextAlignmentCenter; label.textColor = [UIColor yellowColor]; self.navigationItem.titleView = label; label.text = NSLocalizedString(@"Latest Questions", @""); [label sizeToFit]; } return self; 

我相信正确的方法来设置UINavigationBar的颜色是:

 NSDictionary *attributes=[NSDictionary dictionaryWithObjectsAndKeys:[UIColor redColor],UITextAttributeTextColor, nil]; self.titleTextAttributes = attributes; 

上面的代码是UINavigationBar的子类,显然没有子类化。

这在Swift中适用于我:

 navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.white] 

你应该调用[label sizeToFit]; 设置文本后,当其他button占据导航栏时标题被自动重新定位到标题视图中,以防止奇怪的偏移。

可以在appdelegate文件中使用这个方法并且可以在任何视图中使用

 +(UILabel *) navigationTitleLable:(NSString *)title { CGRect frame = CGRectMake(0, 0, 165, 44); UILabel *label = [[[UILabel alloc] initWithFrame:frame] autorelease]; label.backgroundColor = [UIColor clearColor]; label.font = NAVIGATION_TITLE_LABLE_SIZE; label.shadowColor = [UIColor whiteColor]; label.numberOfLines = 2; label.lineBreakMode = UILineBreakModeTailTruncation; label.textAlignment = UITextAlignmentCenter; [label setShadowOffset:CGSizeMake(0,1)]; label.textColor = [UIColor colorWithRed:51/255.0 green:51/255.0 blue:51/255.0 alpha:1.0]; //label.text = NSLocalizedString(title, @""); return label; } 

titleTextAttributes显示条的标题文本的属性。

@property(nonatomic,copy)NSDictionary * titleTextAttributes讨论您可以使用NSString UIKit Additions Reference中描述的文本属性键为文本属性字典中的标题指定字体,文本颜色,文本阴影颜色和文本阴影偏移量。

可用性iOS 5.0及更高版本中提供。 在UINavigationBar.h中声明

  self.navigationItem.title=@"Extras"; [self.navigationController.navigationBar setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"HelveticaNeue" size:21], NSFontAttributeName,[UIColor whiteColor],UITextAttributeTextColor,nil]]; 

为了让Erik B的优秀解决scheme在应用程序的不同UIVIewCOntroller中更加可用,我build议为UIViewController添加一个类别,并在其中声明他的setTitle:title方法。 像这样,您将在所有视图控制器上获得标题颜色更改,而不需要重复。

有一点需要注意的是,你不需要[super setTItle:tilte]; 在Erik的代码中,您将需要在您的视图控制器中显式调用self.title = @“my new title”,以调用此方法

 @implementation UIViewController (CustomeTitleColor) - (void)setTitle:(NSString *)title { UILabel *titleView = (UILabel *)self.navigationItem.titleView; if (!titleView) { titleView = [[UILabel alloc] initWithFrame:CGRectZero]; titleView.backgroundColor = [UIColor clearColor]; titleView.font = [UIFont boldSystemFontOfSize:20.0]; titleView.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5]; titleView.textColor = [UIColor blueColor]; // Change to desired color self.navigationItem.titleView = titleView; [titleView release]; } titleView.text = title; [titleView sizeToFit]; } 

@结束