如何更改 UINavigationItem 的背景颜色?

Posted

技术标签:

【中文标题】如何更改 UINavigationItem 的背景颜色?【英文标题】:How to change background color of UINavigationItem? 【发布时间】:2015-05-11 02:55:17 【问题描述】:

我有一个UINavigationItem,但我在属性检查器中除了标题、提示和后退按钮之外找不到任何东西

我想知道如何使用代码更改我的UINavigationItem 背景颜色?还是以编程方式?

【问题讨论】:

可能稍微裁剪一下该图像? 您可以更改图像背景,也可以通过编程方式添加它并使图标具有透明背景。 @bumble_bee_ tuna 我想表明,除了属性检查器中的 3 选项之外,什么都没有:) @bejibun 我如何使用 swift 在代码中做到这一点? @EgaSetyaPutra 我想,但其中 75% 是不必要的,这使您的问题难以阅读。 【参考方案1】:

你可以通过代码改变它...

对于 Objective-C:

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

在 viewDidLoad 方法中写上一行。

对于 Swift:

    self.navigationController?.navigationBar.barStyle = UIBarStyle.BlackTranslucent

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

    self.navigationController!.navigationBar .setBackgroundImage(UIImage .new(), forBarMetrics: UIBarMetrics.Default)
    self.navigationController!.navigationBar.shadowImage = UIImage .new();
    self.navigationController!.navigationBar.translucent = true;
    self.navigationController!.navigationBar.backgroundColor = UIColor.redColor();

您可以根据自己的选择更改颜色。

要更改条形文字...

navigationController.navigationBar.titleTextAttributes = [UITextAttributeTextColor: UIColor.blueColor()]

查看链接.... Here

看上面的图片...你喜欢这个屏幕的输出吧...!!!

【讨论】:

你想改变导航栏的背景颜色吗? 不,我想改变 uinavigationitem 的背景颜色 表示您要更改后退按钮颜色..背景颜色 不,它与 uinavigationbar 几乎相同,但它在属性检查器上没有任何东西,除了 3 件事 @EgaSetyaPutra 我已经编辑了我的答案,请再试一次,因为它对我有用。我已经发布了更新的答案,请尝试一下。【参考方案2】:

您不应该使用 UINavigationBar 的背景属性,而应该像这样使用 barTintColor:

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

如official documentation 中所写,要更改条形背景,您必须访问 barTintColor 属性:

The tint color to apply to the navigation bar background.

如果你想编辑导航栏的样式,比如按钮颜色,你应该访问 barTint 属性。如果要编辑导航项的样式,例如后退按钮,则应编辑按钮属性,而不是 UINavigationItem 的。

【讨论】:

你应该学会阅读官方文档:developer.apple.com/library/prerelease/ios/documentation/UIKit/…“应用于导航栏背景的色调颜色。”【参考方案3】:

一种可能的解决方案是将包含导航项的视图控制器嵌入到导航控制器中,并访问导航栏的属性颜色:

// Color title 'navigationItem'
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]

// Background 'navigationBar'
UINavigationBar.appearance().barTintColor = UIColor.blackColor()

// Color title 'navigationBar'
let color = UIColor.orangeColor()
self.navigationController?.navigationBar.topItem?.backBarButtonItem?.setTitleTextAttributes(
    [NSForegroundColorAttributeName: color], forState: .Normal)

【讨论】:

【参考方案4】:

对于 Swift 4

  self.navigationController?.navigationBar.isTranslucent = false;
  self.navigationController?.navigationBar.backgroundColor = .white

【讨论】:

以上是关于如何更改 UINavigationItem 的背景颜色?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 UINavigationItem 字体?

无法更改 UINavigationItem 中 UIButton 的标题

处理容器控制器中子视图控制器的 UINavigationItem 更改的最佳实践?

未显示自定义 UINavigationItem 上的标题

UINavigationItem 上的 touchUpInside 事件

无法以编程方式设置 UINavigationItem 标题