如何在iOS 7中更改导航栏颜色?
基本上,我想实现类似Twitter导航栏(已更新Twitter iOS7
)的功能。我在顶部嵌入了导航栏view controller
。我想要的只是将导航栏的颜色更改为浅蓝色,顶部的实用程序栏也是如此。我似乎找不到自己的选择storyboard
。
如何在iOS 7中更改导航栏颜色?
基本上,我想实现类似Twitter导航栏(已更新Twitter iOS7
)的功能。我在顶部嵌入了导航栏view controller
。我想要的只是将导航栏的颜色更改为浅蓝色,顶部的实用程序栏也是如此。我似乎找不到自己的选择storyboard
。
Answers:
tintColor
for栏的行为在iOS 7.0中已更改。它不再影响酒吧的背景。
从文档中:
barTintColor 类参考
应用于导航栏背景的色调颜色。
@property(nonatomic, retain) UIColor *barTintColor
讨论
除非您将透明属性设置为,否则默认情况下此颜色为半透明NO
。
可用性
在iOS 7.0和更高版本中可用。
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 7 UI过渡指南中提到的iOS版本
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 编辑
只需使用Xcode中的Interface Builder,就可以轻松完成原始问题的要求-以获得旧的Twitter导航栏外观,带有白色文本的蓝色背景。
那应该给您您想要的。这是一个屏幕截图,可以使您更轻松地看到在哪里进行更改。
请注意,仅更改Bar Tint不会改变导航栏或状态栏中的文本颜色。样式也需要更改。
Default
并且Black
在iOS 9中仍然可用。不赞成使用的是BlackOpaque
和BlackTranslucent
,它们已被Black
样式和半透明的复选框所取代。苹果开发者网站上的
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];
[[UINavigationBar appearance] setBarTintColor:[UIColor barColor]];
为iOS 7 添加
对于快速更改导航栏颜色:
self.navigationController?.navigationBar.barTintColor = UIColor.red
更改标题字体,大小,颜色:
self.title = "title"
self.navigationController?.navigationBar.titleTextAttributes = [
NSAttributedString.Key.foregroundColor : UIColor.white,
NSAttributedString.Key.font : UIFont(name: "Futura", size: 30)!
]
如果要使用十六进制代码,这是最好的方法。
首先,在班级顶部定义此代码:
#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)];
将十六进制代码替换为00b0f0。
如果您需要支持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];
}
}
它实际上比我在这里看到的答案容易:
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
用白色标题和按钮文字设置所需的深蓝色。
但是我还需要将时钟,载波,信号强度等更改为白色。黑色只是与深蓝色的对比度不足。
我可能忽略了这个解决方案在之前的一个答案,但我可以通过加入这一行到我的最高水平进行改变viewController
的viewDidLoad
:
[self.navigationController.navigationBar setBarStyle:UIStatusBarStyleLightContent];
UIStatusBarStyleLightContent
可以,但是似乎正确的枚举setBarStyle:
是UIBarStyleBlack
- (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];