如何更改导航项的字体?

How do I change font for navigation items?

我知道这一定很简单,但它让我望而却步:

我在 UINavigationController 中有代码可以很好地设置导航栏标题的字体,以及背景颜色和导航项的颜色:

override func viewDidLoad() {

    super.viewDidLoad()

    let navigationBarAppearace = UINavigationBar.appearance()

    navigationBarAppearace.tintColor = UIColor.white
    navigationBarAppearace.barTintColor = UIColor(colorLiteralRed: 46/255, green: 99/255, blue: 201/255, alpha: 1.0)
    navigationBarAppearace.titleTextAttributes = [ NSFontAttributeName: UIFont(name: "OpenSans", size: 17)!]

}

但我无法更改导航项的字体。我尝试了一些东西,包括(在同一个 viewDidLoad 中):

self.navigationItem.backBarButtonItem?.setTitleTextAttributes([ NSFontAttributeName: UIFont(name: "OpenSans", size: 17)!], for: UIControlState.normal)

以及(在使用导航栏的其中一个 ViewController 的 viewDidLoad 中:)

self.navigationController?.navigationItem.backBarButtonItem?.setTitleTextAttributes([ NSFontAttributeName: UIFont(name: "OpenSans", size: 17)!], for: UIControlState.normal)

我在 plist 中有该字体,并且正在项目的其他部分成功使用它。我想我只是想以错误的方式做这件事,有人可以帮忙吗?

您可以更改 UINavigationViewController 中所有 UIBarButtonItem 的外观 class:

UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: font!], for: UIControlState.normal)  

在此处查看更多详细信息:Change font of back navigation bar button

如果 OpenSans 不在 plist 文件中你会得到 fatal error: unexpectedly found nil while unwrapping an Optional value

所以尝试

override func awakeFromNib() {
    let navigationBarAppearace = UINavigationBar.appearance()

    navigationBarAppearace.tintColor = UIColor.white
    navigationBarAppearace.barTintColor = UIColor(colorLiteralRed: 46/255, green: 99/255, blue: 201/255, alpha: 1.0)
    navigationBarAppearace.titleTextAttributes = [ NSFontAttributeName: UIFont(name: "OpenSans", size: 17)!]
}