更改 UINavigationController 按钮的颜色

Posted

技术标签:

【中文标题】更改 UINavigationController 按钮的颜色【英文标题】:Changing the color of the UINavigationController buttons 【发布时间】:2013-10-01 07:55:52 【问题描述】:

我的 UINavigationController 中有这个:

(void)viewDidLoad

    [super viewDidLoad];
// Do any additional setup after loading the view.

    self.navigationBar.tintColor = [UIColor whiteColor];
    self.navigationBar.barTintColor = [UIColor blackColor];
    self.navigationItem.leftBarButtonItem.tintColor = [UIColor greenColor];
    //self.navigationItem.rightBarButtonItem.tintColor = [UIColor greenColor];
    //self.navigationItem.rightBarButtonItem = nextButton;

前两行工作正常:导航栏的文本是白色的,背景是黑色的。第三个(我尝试过的第四个)似乎被忽略了。

如何让左右栏按钮的文字颜色不同?我在 ios7 中看到 Apple 的应用程序这样做。

【问题讨论】:

看了下ios 7的应用,估计是做不到了。 【参考方案1】:

我不确定,但如果您想为 leftright 条形按钮应用不同的颜色,那么只需尝试独立应用 tintColor 并删除该行将tintColor 设置为navigationBar。试试看吧。

更新:

看起来 Apple 不希望我们在 leftright 条形按钮上应用不同的颜色了。 UINavigationBar 的某些属性的行为已从 iOS 7 更改。我的Answer里已经有描述了,你可以查一下。

【讨论】:

你是在 ios 7 上运行吗,导致上面的条形按钮文本在我运行上面的代码时是蓝色的 @chris : 不,我只是给你提示。 是的,好吧,似乎 ios 7 不喜欢这个,布局转换指南没有显示这种可能性 - developer.apple.com/library/ios/documentation/UserExperience/… @chris:是的,我知道。但我在想,如果他们删除了那部分,那么他们也应该删除左右栏按钮的 tintColor 属性。【参考方案2】:

这应该可行。我刚刚用一个最小的应用程序进行了测试。确保在尝试着色时实际设置了 leftBarButtonItem。

【讨论】:

你运行的是这个 ios 7 吗? 当然。哦,我刚刚注意到我只在模拟器上测试过。我注意到,特别是关于 iOS 7 中的条形和色调,模拟器和设备之间(甚至设备之间)的行为和错误可能有所不同。马上回来。 我在设备上试过了;见附件截图。请原谅颜色选择,这是一个测试应用程序,旨在使颜色差异非常明显。 注意:如果这对您不起作用,则可能是序列问题。也许您的更改被某些东西覆盖了。在我的测试项目中(最初是为了测试其他东西而创建的),我在外部设置了rootVC.navigationItem.rightBarButtonItem.tintColor,在它的视图被加载之后(但在它显示之前)。无论如何,有一种方法可以让它工作,如果它不能立即为您工作,请稍后尝试设置 tintColor(如在 loadView 中)。 是我的眼睛还是你的图片在石灰绿色导航栏左右两边都有蓝色文字?【参考方案3】:

我在使用其他答案时遇到了麻烦,但这对我来说非常有用。

[self.clearButton setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                         [UIColor redColor], NSForegroundColorAttributeName,
                                         nil] forState:UIControlStateNormal];

其中 clearButton 只是对我的左侧导航栏项目的引用。使用ios7。

【讨论】:

UITextAttributeTextColor 在 iOS7 上已弃用,请改用 NSForegroundColorAttributeName【参考方案4】:

我通过在 AppDelegate 中设置一般颜色来做到这一点:

UINavigationBar.appearance().tintColor = tintColor

然后我会在各个视图控制器中创建自定义栏按钮项并将其设置为 leftBarButton 或 rightBarButton。

 let filterStr = NSLocalizedString("FILTER", value: "Filter", comment: "Navigation bar item")
 self.searchButton = UIBarButtonItem.init(title: filterStr, style: .plain, target: self, action: #selector(<someMethod()>)     
 self.searchButton?.setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.gray], for: UIControlState.normal)
 self.navigationItem.setLeftBarButton(self.searchButton!, animated: false)

【讨论】:

以上是关于更改 UINavigationController 按钮的颜色的主要内容,如果未能解决你的问题,请参考以下文章

更改 UINavigationController 中的视图高度

Swift:更改 UINavigationController 视图的高度

快速更改UITabBar中“更多” UINavigationController的背景颜色

更改 UINavigationController 颜色和字体

UINavigationController 背景颜色更改在 iOS 中隐藏后退按钮

更改 UINavigationController 过渡效果的正确方法是啥