如何更改iOS 7中的导航栏颜色?
如何更改iOS 7中的导航栏颜色?
基本上我想要实现的东西就像Twitter的导航栏(更新Twitter的iOS7
是)。 我embedded在view controller
顶部的导航栏中。 我只需要将导航栏颜色与顶部的实用工具栏一起更改为浅蓝色。 我似乎无法在storyboard
find选项。
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项目,则这些项目仍将以默认的蓝色显示其文本,因此在“属性”检查器的“视图”组中,将“色调”更改为“白色”。
这应该得到你想要的。 这是一个屏幕截图,可以让您更容易地看到在哪里进行更改。
请注意,只更改条形色调不会更改导航栏或状态栏中的文本颜色。 风格也需要改变。
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,但我能够通过添加此行到我的顶级viewController
的viewDidLoad
:
[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];