如何在 iOS 7 或 6 中更改导航栏颜色?

Posted

技术标签:

【中文标题】如何在 iOS 7 或 6 中更改导航栏颜色?【英文标题】:How to change navigation bar color in iOS 7 or 6? 【发布时间】:2013-08-13 04:12:39 【问题描述】:

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

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

【问题讨论】:

***.com/questions/18929864/… 【参考方案1】:

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

navController.navigationBar.barTintColor = [UIColor navigationColor];

【讨论】:

已确认,tintColor 在 iOS 7 中不起作用,但 barTintColor 可以。 您可能还想设置 navController.navigationBar.translucent = NO 在这里查看完整答案:***.com/questions/18929864/…【参考方案2】:

如果您希望 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]];

【讨论】:

我正在使用自定义导航栏,上面的代码对我不起作用(ios7)。我必须明确地写这个: [[UINavigationBar appearance] setTitleTextAttributes:@NSForegroundColorAttributeName:[UIColor whiteColor]]; [[UINavigationBar 外观] setBarTintColor:[UIColor greenColor]];应该在 iOS 7 中工作【参考方案3】:

// 在 ios 7 中:-

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

// 在 ios 6 中:-

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

【讨论】:

感谢它的工作,但如何改变 purticular viewcontroller 导航栏颜色请帮助我【参考方案4】:

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

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

【讨论】:

【参考方案5】:

还有一点,如果你想改变UIPopover中的导航背景颜色,你需要将barStyle设置为UIBarStyleBlack

if([UINavigationBar instancesRespondToSelector:@selector(barTintColor)]) //iOS7
    navigationController.navigationBar.barStyle = UIBarStyleBlack;
    navigationController.navigationBar.barTintColor = [UIColor redColor];

【讨论】:

【参考方案6】:

这里是如何为 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;
    

【讨论】:

而不是检查 iosVersion 你应该使用 respondsToSelector 即[[UINavigationBar appearance] respondsToSelector:@selector(barTintColor)] 对于代理你应该使用instanceRespondToSelector。对于这种情况,它将是 [UINavigationBar instancesRespondToSelector:@selector(barTintColor)]【参考方案7】:

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

 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]];

【讨论】:

【参考方案8】:

您可以查看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];

【讨论】:

【参考方案9】:

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

/* 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];

【讨论】:

【参考方案10】:
    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]];

【讨论】:

【参考方案11】:

在 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]];

【讨论】:

【参考方案12】:

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

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

诀窍是你需要去掉默认的背景图片,然后颜色才会出现。

【讨论】:

您的代码适用于导航栏,但您能否将相同的背景应用于状态栏? 据我所知,在 iOS6 中您无法更改状态栏颜色。你只能让它“半透明”。在 iOS7 中,你可以改变状态栏的颜色,但它是通过 NavigationBar 的背景图像来实现的。在 iOS7 中,我使用具有首选颜色的 1x1 像素图像作为 NavigationBar 背景图像,并且它也会自动扩展到状态栏(如 Apple 官方 iOS7 文档中所述)。【参考方案13】:

如果你想改变导航栏的颜色,使用它的barTintColor 属性。此外,如果您将任何颜色设置为它的tintColor,则会影响导航栏的项目,如按钮。

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

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

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

【讨论】:

【参考方案14】:

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

[[UINavigationBar appearanceWhenContainedIn:[UITabBarController class],nil] setBarTintColor:[UIColor blueColor]];

【讨论】:

【参考方案15】:

ViewController.m- (void)viewDidLoad 中尝试以下代码

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

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

【讨论】:

【参考方案16】:

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

试试这个代码..

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

【讨论】:

以上是关于如何在 iOS 7 或 6 中更改导航栏颜色?的主要内容,如果未能解决你的问题,请参考以下文章

在iOS 7中隐藏导航栏时,如何更改状态栏的颜色?

如何在iOS 7上更改状态栏背景颜色和文本颜色? Warif Akhand Rishi

iOS 7隐藏导航栏时如何更改状态栏的颜色?

如何在 iOS 7.1.1 / iPhone 5s 上更改导航栏按钮颜色

如何在 iOS7 的 UIPopoverController 中更改导航栏背景/颜色?

iOS 7 中 UIActivityViewControllers 的模态状态栏和导航栏文本颜色