我试图改变设置按钮的颜色为白色,但不能让它改变。

这两种方法我都试过:

navigationItem.leftBarButtonItem?.tintColor = UIColor.whiteColor()
navigationItem.backBarButtonItem?.tintColor = UIColor.whiteColor()

但没有变化,它看起来仍然是这样的:

我怎么把那个按钮变成白色?


当前回答

斯威夫特5.3:

UINavigationBar.appearance().backIndicatorImage = UIImage(named: "custom-back-image")
UINavigationBar.appearance().backIndicatorTransitionMaskImage = UIImage(named: "custom-back-image")

其他回答

斯威夫特

 override func viewDidLoad() {
     super.viewDidLoad()

 self.navigationController?.navigationBar.tintColor = UIColor.white
 }

不知道为什么没有人提到这一点…但我所做的正是你在我的viewDidLoad中所做的…但它并没有起作用。然后我把我的代码放在viewWillAppear,它都工作了。

上面的解决方案是改变一个barbuttonItem。如果你想改变代码中每个navigationBar的颜色,那么遵循这个答案。

基本上,使用appearance()更改到类本身就像在应用程序中对该视图的所有实例进行全局更改。更多信息请参阅这里

所有的答案设置UINavigationBar.appearance()。tintColor与苹果在UIAppearance.h中的文档冲突。

注意:在iOS7上tintColor属性已经移动到UIView,现在有特殊的继承行为在UIView.h中描述。 这种继承的行为可能与外观代理发生冲突,因此现在外观代理不允许使用tintColor。

在Xcode中,你需要命令-点击你想要使用外观代理的每个属性来检查头文件,并确保该属性带有ui_appearance ance_selector注释。

因此,通过外观代理将导航栏染成紫色,标题和按钮染成白色的正确方法是:

UINavigationBar.appearance().isTranslucent = false
UINavigationBar.appearance().barTintColor = .purple
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
UIBarButtonItem.appearance().tintColor = .white

注意UIBarButtonItem不是UIView的子类,而是NSObject。它的tintColor属性不是从UIView继承的tintColor。

不幸的是,UIBarButtonItem。tintColor没有使用ui_appearance ance_selector进行注释——但在我看来这是一个文档错误。苹果工程部门对此雷达的回应是支持的。

让我们试试这段代码:

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.

    let navigationBarAppearace = UINavigationBar.appearance()
    navigationBarAppearace.tintColor = UIColor.whiteColor()  // Back buttons and such
    navigationBarAppearace.barTintColor = UIColor.purpleColor()  // Bar's background color
    navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]  // Title's text color

    self.window?.backgroundColor = UIColor.whiteColor()
    return true
}

在故事板中很容易设置: