如何在导航栏中设置backBarButtonItem标题的样式?

时间:2017-09-26 16:30:43

标签: ios swift

我希望只能更改导航栏中后退按钮的文字颜色。

作为一种解决方法,我可以通过创建自定义视图并将其分配给navigationItem.leftBarButtonItem来做我想做的事情,但它看起来不是很好而且我也是失去了滑动能力。 enter image description here

以上代码:

let button = UIButton(type: .system)
    let originalImage = #imageLiteral(resourceName: "BackButton")
    let scaledImage: UIImage = UIImage(cgImage: originalImage.cgImage!, scale: 30, orientation: originalImage.imageOrientation)

    button.setImage(scaledImage, for: .normal)
    button.setTitle("YourTitle", for: .normal)
    button.sizeToFit()
    button.setTitleColor(.brown, for: .normal)
    button.tintColor = .blue

    navigationItem.leftBarButtonItem = UIBarButtonItem(customView: button)

我还看到了建议通过

设置后退按钮的属性
navigationController?.navigationBar.topItem.backBarButtonItem?.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.red], for: .normal)

但是,尽管

,这似乎对文本的外观没有任何影响
print("Attributes: ", navigationController?.navigationBar.topItem?.backBarButtonItem?.titleTextAttributes(for: .normal) ?? "No attributes")

产生Attributes: ["NSColor": UIExtendedSRGBColorSpace 1 0 0 1]

我可以设置tintColor但是除了标题之外,这会改变背面图标的颜色。

那么做我想要的最好方法是什么?有办法吗?

2 个答案:

答案 0 :(得分:0)

我不确定我是否理解正确。但请尝试以下代码。这将适用于您应用的所有栏按钮项。将此代码放在仅在应用程序生命周期内调用一次的位置。与application: didFinishLaunchingWithOptions:

一样
let attribs = [NSForegroundColorAttributeName: UIColor.red, NSFontAttributeName: UIFont.boldSystemFont(ofSize: 18)]
UIBarButtonItem.appearance().setTitleTextAttributes(attribs, for: .normal)

答案 1 :(得分:0)

我明白了。您可以通过在上一个视图控制器中设置self.navigationItem.backBarButtonItem来设置后退按钮的样式。

例如,在我的情况下,我有TableViewController,当您点击某个单元格时,该应用会转换为ViewController。在TableViewController我有

public func changeColor() {
    let barButton = UIBarButtonItem(title: "Anything", style: .plain, target: nil, action: nil)
    barButton.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.brown], for: .normal)

    self.navigationItem.backBarButtonItem = barButton
}

然后在ViewController我有

@IBAction func buttonPressed(_ sender: Any) {
    let vc = self.navigationController?.viewControllers[0] as! TableViewController
    vc.changeColor()
    self.title = "hello very long title asdfasdfasfdasdfasdfasdfasdfasdf"
}

因此,按下ViewController中的按钮会将其后退按钮标题的颜色更改为棕色。