47

我有一个使用 Storyboards 的项目,每当我使用 segue 推送视图控制器时,动态创建的条形按钮项总是蓝色的。

在此处输入图像描述

它快把我逼疯了。因为这个对象是动态创建的,所以我不能在 IB 中设置它的颜色(就像我对以前的条形按钮项目所做的那样)。

我尝试过的解决方案包括:

  1. 设置在接收器的viewDidLoad
  2. 设置在接收器的viewDidAppear

    self.navigationItem.backBarButtonItem.tintColor = [UIColor whiteColor];

  3. 当我看到这不太奏效时,我尝试设置 leftBarButtonItem :

self.navigationItem.leftBarButtonItem.tintColor = [UIColor whiteColor];

  1. 在调用新视图时以及在推送新视图之前,我在应用程序的委托中尝试了以下代码(我从其他 SO 答案中获得):

    [[UIBarButtonItem appearance] setTintColor:[UIColor whiteColor]];

我发现的所有谷歌答案都建议使用上面的代码,但它对我来说根本不起作用。或许 iOS 7 的外观 API 有一些变化?无论我如何或在何处尝试将“类别”设置为白色,它始终是默认的蓝色。

4

8 回答 8

85

在 iOS 7 中,要设置应用程序中所有 barButtonItems 的颜色,请tintColor在 AppDelegate 中设置应用程序窗口的属性。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window.tintColor = [UIColor whiteColor];
    return YES;
}

Apple 的 iOS 7 UI 过渡指南中的更多详细信息(特别是在“使用色调颜色”部分下)。

***或者***

根据一些评论,您还可以使用 UINavigationBar 外观代理来实现这一点。这将只影响 UIBarButtonItems 的 tintColor,而不是在窗口上设置 tintColor 并影响该窗口的所有子视图。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    if([UINavigationBar conformsToProtocol:@protocol(UIAppearanceContainer)]) {
        [UINavigationBar appearance].tintColor = [UIColor whiteColor];
    }

    return YES;
}
于 2013-10-21T20:56:10.523 回答
25

我认为您正在寻找 UINavigationBar 的属性。尝试设置self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

请参阅“导航栏的外观”部分:https ://developer.apple.com/library/ios/documentation/userexperience/conceptual/UIKitUICatalog/UINavigationBar.html#//apple_ref/doc/uid/TP40012857-UINavigationBar-SW1

于 2013-10-21T20:57:42.907 回答
10

在 Swift 3.0 中

let navigationBarAppearnce = UINavigationBar.appearance()

导航栏的tintColor会影响后退指示符图像、按钮标题和按钮图像的颜色。

navigationBarAppearnce.barTintColor = UIColor(red: 0.180, green: 0.459, blue: 0.733, alpha: 1.00)

barTintColor 属性会影响条形本身的颜色

navigationBarAppearnce.tintColor = UIColor.white

最终代码

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

 let navigationBarAppearnce = UINavigationBar.appearance()

 navigationBarAppearnce.barTintColor = UIColor(red: 0.180, green: 0.459, blue: 0.733, alpha: 1.00)

 navigationBarAppearnce.tintColor = UIColor.white

 navigationBarAppearnce.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]

 //Change status bar color
 UIApplication.shared.statusBarStyle = .lightContent

 return true
}

在此处输入图像描述

于 2016-10-04T18:04:45.193 回答
6

斯威夫特 5

barButtonItem.setTitleTextAttributes([NSAttributedString.Key.foregroundColor : UIColor.white], for: .normal)
于 2019-12-06T09:15:34.053 回答
3

要更改导航栏中特定项目(例如按钮)的颜色: 在 Objective-C 中

myButton.tintColor = [UIColor redColor];
于 2017-09-29T23:21:43.070 回答
2

在 iOS 8 中,如果您出于某种目的更改了 UIView 色调颜色,例如为 UIAlertView 品牌化,UIToolBar 中 UIBarButtonItem 的色调颜色也会以这种方式更改。要解决此问题,只需编写此代码

[UIView appearance].tintColor = SOME_COLOR;
[UIView appearanceWhenContainedIn:[UIToolbar class], nil].tintColor = BLACK_COLOR;

对于 UINavigationBar 中的 UIBarButtonItem 色调颜色,使用标准方法

[UINavigationBar appearance].tintColor = BLACK_COLOR;
于 2015-11-17T12:26:37.223 回答
0
UITabBar.appearance().tintColor = UIColor.yellowColor()
于 2015-08-03T11:36:32.593 回答
0

这对我有用

AddBarButtonItem.setTitleTextAttributes([NSAttributedString.Key.foregroundColor : UIColor.white], for: .normal)
于 2019-08-19T09:49:52.647 回答