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

这两种方法我都试过:

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

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

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


当前回答

self.navigationController?.navigationBar.tintColor = UIColor.redColor()

这段代码具有魔力。而不是红色,改变它作为你的愿望。

其他回答

你只有一个选择把你的后退按钮藏起来,用你自己来做。 然后设置它的颜色。

我这样做了:

self.navigationItem.setHidesBackButton(true, animated: true)
let backbtn = UIBarButtonItem(title: "Back", style:UIBarButtonItemStyle.Plain, target: self, action: "backTapped:")
self.navigationItem.leftBarButtonItem = backbtn
self.navigationItem.leftBarButtonItem?.tintColor = UIColor.grayColor()
self.navigationController?.navigationBar.tintColor = UIColor.redColor()

这段代码具有魔力。而不是红色,改变它作为你的愿望。

Swift 5更新

如果你需要全局设置后退按钮颜色,你可以简单地使用:

UIBarButtonItem.appearance().tintColor = Asset.pureWhite.color

然后你不需要在每个视图控制器上设置后退按钮的背景色。如果你使用这个,你不能在其他视图控制器上设置返回按钮的颜色

BUT

如果您需要在视图控制器上设置后退按钮颜色或在另一个视图控制器上更改,请不要使用上述方法。你可以用:

let appearance = UINavigationBarAppearance()
appearance.titleTextAttributes = [.font:FontFamily.BatonTurbo.medium.font(size: 20),
                                  .foregroundColor: Asset.pureWhite.color] // Naviagtion Title attributes
appearance.backgroundColor = .red // Navigation bar background color

self.navigationItem.standardAppearance = appearance
self.navigationItem.scrollEdgeAppearance = appearance
self.navigationItem.compactAppearance = appearance

navigationController?.navigationBar.tintColor = .green // Back button color

所有的答案设置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进行注释——但在我看来这是一个文档错误。苹果工程部门对此雷达的回应是支持的。

在Swift 4中,你可以使用以下方法来解决这个问题:

let navStyles = UINavigationBar.appearance()
// This will set the color of the text for the back buttons.
navStyles.tintColor = .white
// This will set the background color for navBar
navStyles.barTintColor = .black