64

我想更改导航栏颜色的颜色,但我不确定是否应该更改色调或背景。我知道 iOS 7 将采用更扁平化的设计(甚至建议移除渐变),但我无法解读这两者。即使我设置了背景颜色,它也不会做任何事情。

在此图像中,背景设置为绿色,但条仍为蓝色:

在此处输入图像描述

4

16 回答 16

107

iOS 7.0 中条形的 tintColor 行为已更改。它不再影响栏的背景,其行为与添加到 UIView 的 tintColor 属性的描述相同。要为栏的背景着色,请使用 -barTintColor。

navController.navigationBar.barTintColor = [UIColor navigationColor];

于 2013-09-02T11:46:40.380 回答
79

如果您想在iOS 6中为导航栏设置类似于 iOS 7的纯色,请使用以下命令:

[[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setBackgroundColor:[UIColor greenColor]];

iOS 7中使用barTintColor这样的:

navigationController.navigationBar.barTintColor = [UIColor greenColor];

或者

 [[UINavigationBar appearance] setBarTintColor:[UIColor greenColor]];
于 2013-09-18T11:03:26.170 回答
36

// 在 iOS 7 中:-

[self.navigationController.navigationBar setBarTintColor:[UIColor yellowColor]];

// 在 iOS 6 中:-

[self.navigationController.navigationBar setTintColor:[UIColor yellowColor]];
于 2013-10-08T06:24:37.570 回答
11

背景颜色属性在 a 上被忽略UINavigationBar,因此如果您想调整外观和感觉,您必须使用或调用UINavigationBar 类参考tintColor的“自定义栏外观”下列出的一些其他方法(如)。setBackgroundImage:forBarMetrics:

请注意,该tintColor属性在 iOS 7 中的工作方式有所不同,因此如果您希望 iOS 7 和之前版本之间的外观保持一致,则最好使用背景图像。还值得一提的是,您无法在情节提要中配置背景图像,您必须创建一个IBOutlet您的背景图像UINavigationBar并将其更改为viewDidLoad其他适当的位置。

于 2013-08-11T21:53:23.543 回答
5

还有一件事,如果你想改变UIPopover中的导航背景颜色,你需要设置barStyleUIBarStyleBlack

if([UINavigationBar instancesRespondToSelector:@selector(barTintColor)]){ //iOS7
    navigationController.navigationBar.barStyle = UIBarStyleBlack;
    navigationController.navigationBar.barTintColor = [UIColor redColor];
}
于 2013-11-28T08:00:16.727 回答
4

带有版本检查的完整代码。

 if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) {

    // do stuff for iOS 7 and newer
    [self.navigationController.navigationBar setBarTintColor:[UIColor yellowColor]];
}
else {

    // do stuff for older versions than iOS 7
    [self.navigationController.navigationBar setTintColor:[UIColor yellowColor]];
}
于 2014-07-27T16:47:56.410 回答
4

以下是如何为 iOS 6 和 7 正确设置它。

+ (void)fixNavBarColor:(UINavigationBar*)bar {
    if (iosVersion >= 7) {
        bar.barTintColor = [UIColor redColor];
        bar.translucent = NO;
    }else {
        bar.tintColor = [UIColor redColor];
        bar.opaque = YES;
    }
}
于 2013-11-05T08:43:29.243 回答
4

您可以检查 iOS 版本并简单地设置导航栏的色调颜色。

if (SYSTEM_VERSION_LESS_THAN(@"7.0")) {
    self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:0.9529 green:0.4392 blue:0.3333 alpha:1.0];
}else{

    self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:0.9529 green:0.4392 blue:0.3333 alpha:1.0];
    self.navigationItem.leftBarButtonItem.tintColor = [UIColor whiteColor];
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}
于 2015-05-04T09:47:26.920 回答
3

根据发布的回答,这对我有用:

/* check for iOS 6 or 7 */
if ([[self navigationController].navigationBar respondsToSelector:@selector(setBarTintColor:)]) {
    [[self navigationController].navigationBar setBarTintColor:[UIColor whiteColor]];

} else {
    /* Set background and foreground */
    [[self navigationController].navigationBar setTintColor:[UIColor whiteColor]];
    [self navigationController].navigationBar.titleTextAttributes = [[NSDictionary alloc] initWithObjectsAndKeys:[UIColor blackColor],UITextAttributeTextColor,nil];
}
于 2014-01-15T20:43:30.023 回答
2
    you can add bellow code in appdelegate.m .if your app is navigation based

    // for background color
   [nav.navigationBar setBarTintColor:[UIColor blueColor]];

    // for change navigation title and button color
    [[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor],
    NSForegroundColorAttributeName,               
    [UIFont fontWithName:@"FontNAme" size:20],
    NSFontAttributeName, nil]];
    [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
于 2014-02-12T11:27:16.933 回答
2

在 AppDelegate.m 的 didFinishLaunchingWithOptions() 中插入以下代码

[[UINavigationBar appearance] setBarTintColor:[UIColor
    colorWithRed:26.0/255.0 green:184.0/255.0 blue:110.0/255.0 alpha:1.0]];
于 2016-10-25T07:22:17.313 回答
1

在 iOS7 中,如果您的导航控制器包含在选项卡栏、拆分视图或其他容器中,则要全局更改导航栏外观,请使用以下方法::

[[UINavigationBar appearanceWhenContainedIn:[UITabBarController class],nil] setBarTintColor:[UIColor blueColor]];
于 2014-06-04T07:45:32.347 回答
1

我正在使用以下代码(在 C# 中)来更改 NavigationBar 的颜色:

NavigationController.NavigationBar.SetBackgroundImage (new UIImage (), UIBarMetrics.Default);
NavigationController.NavigationBar.SetBackgroundImage (new UIImage (), UIBarMetrics.LandscapePhone);
NavigationController.NavigationBar.BackgroundColor = UIColor.Green;

诀窍是您需要摆脱默认的背景图像,然后颜色才会出现。

于 2013-09-03T10:52:20.433 回答
1

如果要更改导航栏的颜色,请使用barTintColor它的属性。此外,如果您为其设置任何颜色tintColor,则会影响导航栏的项目,例如按钮。

仅供参考,您想保留 iOS 6 样式栏,使背景图像看起来像以前的样式并设置它。

有关更多详细信息,您可以从以下链接获取更多信息:

https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/AppearanceCustomization.html

于 2013-09-25T03:20:55.600 回答
0

试试下面的- (void)viewDidLoad代码ViewController.m

[[[self navigationController] navigationBar] setTintColor:[UIColor yellowColor]];

这在iOS 6中对我有用..试试看..

于 2014-07-09T12:11:43.297 回答
-4

我不确定更改色调与背景颜色,但这是您更改导航栏色调颜色的方式:

试试这个代码..

[navigationController.navigationBar setTintColor:[UIColor redColor]; //以红色为例。

于 2013-08-12T03:26:23.867 回答