如何更改iOS 7中的导航栏颜色?

如何更改iOS 7中的导航栏颜色?

基本上我想要实现的东西就像Twitter的导航栏(更新Twitter的iOS7是)。 我embedded在view controller顶部的导航栏中。 我只需要将导航栏颜色与顶部的实用工具栏一起更改为浅蓝色。 我似乎无法在storyboardfind选项。

tintColor for bars的行为在iOS 7.0中已经改变。 它不再影响酒吧的背景。

从文档:

barTintColor 类参考

应用于导航栏背景的色调颜色。

 @property(nonatomic, retain) UIColor *barTintColor 

讨论
除非将半透明属性设置为NO否则此颜色默认为半透明。

可用性

在iOS 7.0和更高版本中可用。

宣布在
UINavigationBar.h

 NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."]; if ([[ver objectAtIndex:0] intValue] >= 7) { // iOS 7.0 or later self.navigationController.navigationBar.barTintColor = [UIColor redColor]; self.navigationController.navigationBar.translucent = NO; }else { // iOS 6.1 or earlier self.navigationController.navigationBar.tintColor = [UIColor redColor]; } 

我们也可以使用它来检查iOS版本,如iOS 7 UI过渡指南中所提到的

 if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) { // iOS 6.1 or earlier self.navigationController.navigationBar.tintColor = [UIColor redColor]; } else { // iOS 7.0 or later self.navigationController.navigationBar.barTintColor = [UIColor redColor]; self.navigationController.navigationBar.translucent = NO; } 

编辑使用xib

在这里输入图像描述

我知道这个问题在一年多以前被问及,并且回答,但是…

做原始的问题要得到旧的Twitter的导航栏的外观,蓝色的背景和白色的文字 – 很容易做,只需使用Xcode中的界面生成器。

  • 使用文档大纲,select您的导航栏。
  • 在“属性”检查器的“导航栏”组中,将“样式”从“默认”更改为“黑色”。 这将导航和状态栏的背景颜色更改为黑色,并将其文本更改为白色。 所以当应用程序运行时,状态栏中的电池和其他图标和文本将显示为白色。
  • 在相同的导航栏组中,将条形色调更改为您喜欢的颜色。
  • 如果您的导航栏中有条形button项目,则这些项目仍将以默认的蓝色显示其文本,因此在“属性”检查器的“视图”组中,将“色调”更改为“白色”。

这应该得到你想要的。 这是一个屏幕截图,可以让您更容易地看到在哪里进行更改。

在哪里进行必要的更改,包括结果在iOS Simulator中

请注意,只更改条形色调不会更改导航栏或状态栏中的文本颜色。 风格也需要改变。

 self.navigationBar.barTintColor = [UIColor blueColor]; self.navigationBar.tintColor = [UIColor whiteColor]; self.navigationBar.translucent = NO; // *barTintColor* sets the background color // *tintColor* sets the buttons color 

在基于导航的应用程序中,您可以将代码放在AppDelegate中。 更详细的代码可以是:

 // Navigation bar appearance (background and title) [[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor titleColor], NSForegroundColorAttributeName, [UIFont fontWithName:@"FontNAme" size:titleSize], NSFontAttributeName, nil]]; [[UINavigationBar appearance] setTintColor:[UIColor barColor]]; // Navigation bar buttons appearance [[UIBarButtonItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor textBarColor], NSForegroundColorAttributeName, shadowColor, NSShadowAttributeName, [UIFont fontWithName:@"FontName" size:titleSize], NSFontAttributeName, nil]; 

viewDidLoad ,设置:

  self.navigationController.navigationBar.barTintColor = [UIColor blueColor]; 

将( blueColor )更改为任何你想要的颜色。

如果你想使用hex代码,这是最好的方法。

首先,在你的课堂顶部定义这个:

 #define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0] 

然后在“应用程序didFinishLaunchingWithOptions”里面,把这个:

 [[UINavigationBar appearance] setBarTintColor:UIColorFromRGB(0x00b0f0)]; 

把你hex代码代替00b0f0。

在iOS 7中,您必须使用-barTintColor属性:

 navController.navigationBar.barTintColor = [UIColor barColor]; 

如果你需要支持ios6和ios7,那么你在UIViewController中使用这个特定的浅蓝色:

 - (void)viewDidLoad { [super viewDidLoad]; NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."]; if ([[ver objectAtIndex:0] intValue] >= 7) { self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:89/255.0f green:174/255.0f blue:235/255.0f alpha:1.0f]; self.navigationController.navigationBar.translucent = NO; }else{ self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:89/255.0f green:174/255.0f blue:235/255.0f alpha:1.0f]; } } 

对于快速更改导航栏颜色:

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

更改标题字体,大小,颜色:

  self.title = "title" self.navigationController?.navigationBar.titleTextAttributes = [ NSForegroundColorAttributeName : UIColor.whiteColor(), NSFontAttributeName : UIFont(name: "Futura", size: 30)! ] 

这实际上比我在这里看到的答案更容易:

 1) Just make sure you select the navigation bar on the Navigation control. 2) Select the color you want in the bar tint. 3) You have other options too, and/or individually on each view (just play with it). 

我希望这有助于某人。 我不喜欢我看到的答案。 我想保持我的代码尽可能干净。 不是说这样做是错误的,但有像我这样的人……这是给你们的。 改变导航栏的颜色

为了使Rajneesh071的代码完整,您可能还需要设置导航栏的标题颜色(以及字体,如果需要),因为默认行为从iOS 6更改为7:

 NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."]; if ([[ver objectAtIndex:0] intValue] >= 7) { self.navigationController.navigationBar.barTintColor = [UIColor blackColor]; self.navigationController.navigationBar.translucent = NO; NSMutableDictionary *textAttributes = [[NSMutableDictionary alloc] initWithDictionary:mainNavController.navigationBar.titleTextAttributes]; [textAttributes setValue:[UIColor whiteColor] forKey:UITextAttributeTextColor]; self.navigationController.navigationBar.titleTextAttributes = textAttributes; } else { self.navigationController.navigationBar.tintColor = [UIColor blackColor]; } 

仅在ViewContorller AppDelegate添加此代码

 if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0) { //This is For iOS6 [self.navigationController.navigationBar setTintColor:[UIColor yellowColor]]; } else { //This is For iOS7 [self.navigationController.navigationBar setBarTintColor:[UIColor yellowColor]]; } 
 //You could place this code into viewDidLoad - (void)viewDidLoad { [super viewDidLoad]; self.navigationController.navigationBar.tintColor = [UIColor redColor]; //change the nav bar colour self.navigationController.view.backgroundColor = [UIColor redColor]; //change the background colour self.navigationController.navigationBar.translucent = NO; } //Or you can place it into viewDidAppear - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:(BOOL)animated]; self.navigationController.navigationBar.tintColor = [UIColor redColor]; //change the nav bar colour self.navigationController.view.backgroundColor = [UIColor redColor]; //change the background colour self.navigationController.navigationBar.translucent = NO; } 

在基于导航的应用程序中,您可以更改颜色

 NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."]; if ([[ver objectAtIndex:0] intValue] >= 7) { self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1]; self.navigationController.navigationBar.translucent = NO; } else { self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1]; } 
 #define _kisiOS7 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) if (_kisiOS7) { [[UINavigationBar appearance] setBarTintColor:[UIcolor redcolor]]; } else { [[UINavigationBar appearance] setBackgroundColor:[UIcolor blackcolor]]; [[UINavigationBar appearance] setTintColor:[UIcolor graycolor]]; } 

这个问题和这些答案是有帮助的。 与他们在一起,我能够设置我想要的深蓝色navigationBar栏颜色与白色标题和button文本。

但是我还需要将时钟,载波,信号强度等更改为白色。 黑色与深蓝色没有足够的对比。

我可能已经忽略了以前的答案之一的解决scheme,但我能够通过添加此行到我的顶级viewControllerviewDidLoad

 [self.navigationController.navigationBar setBarStyle:UIStatusBarStyleLightContent]; 
 - (void)viewDidLoad { [super viewDidLoad]; self.navigationController.navigationBar.barTintColor = [UIColor blueColor]; } 

对于颜色:

 [[UINavigationBar appearance] setBarTintColor:[UIColor blackColor]]; 

对于图像

 [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationBar_320X44.png"] forBarMetrics:UIBarMetricsDefault];