如何在 swift 4 中更改 NavBar 标题文本颜色?

Posted

技术标签:

【中文标题】如何在 swift 4 中更改 NavBar 标题文本颜色?【英文标题】:How can I change the NavBar title text color in swift 4? 【发布时间】:2017-07-21 00:01:08 【问题描述】:

在 swift 3 中开发的时候我习惯写:

UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange]

将其放入 AppDelegate 会将所有 UINavbar 的标题颜色更改为橙​​色。

现在我想对 Swift 4 和 ios 11 做同样的事情。

【问题讨论】:

【参考方案1】:

您可以通过在titleTextAttributes 上设置foregroundColor 属性来更改 UINavigationBar 标题颜色。

据记录 here:

titleTextAttributes 属性指定属性 显示栏的标题文本。您可以指定字体、文本颜色、 文本阴影颜色和文本中标题的文本阴影偏移 使用字体、前景颜色和阴影的属性字典 键。

所以你会得到同样的效果:

UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor.rawValue: UIColor.orange]

【讨论】:

【参考方案2】:

Swift 4.1 更改导航栏标题颜色

    if #available(iOS 11.0, *) 
        //To change iOS 11 navigationBar largeTitle color

        UINavigationBar.appearance().prefersLargeTitles = true
        UINavigationBar.appearance().largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
     else 
        // for default navigation bar title color
        UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
    

Swift 4.2+ 更改导航栏标题颜色

    if #available(iOS 11.0, *) 
        //To change iOS 11 navigationBar largeTitle color

        UINavigationBar.appearance().prefersLargeTitles = true
        UINavigationBar.appearance().largeTitleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
     else 
        // for default navigation bar title color
        UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
    

【讨论】:

NSAttributedStringKey 已更新为 NSAttributedString.Key【参考方案3】:

斯威夫特 4

    UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey(rawValue: NSAttributedStringKey.foregroundColor.rawValue): UIColor.orange]

【讨论】:

【参考方案4】:

应用代理 swift 4.2

 UINavigationBar.appearance().barTintColor = UIColor.white
 UINavigationBar.appearance().tintColor = UIColor(hex: 0xED6E19)
 UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor : UIColor(hex: 0xED6E19)]

【讨论】:

【参考方案5】:

大型和常规标题的 Swift 4 实现:

extension UINavigationController 
    func setTitleForgroundTitleColor(_ color: UIColor) 
        self.navigationBar.titleTextAttributes = [NSAttributedStringKey(rawValue: NSAttributedStringKey.foregroundColor.rawValue): color]
    

    func setLargeTitleColor(_ color: UIColor) 
        self.navigationBar.largeTitleTextAttributes = [NSAttributedStringKey(rawValue: NSAttributedStringKey.foregroundColor.rawValue): color]
    

    func setAllTitleColor(_ color: UIColor) 
        setTitleForgroundTitleColor(color)
        setLargeTitleColor(color)
    

【讨论】:

【参考方案6】:

您可以使用此代码更改导航栏标题颜色

navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]

【讨论】:

【参考方案7】:

斯威夫特 4.2

fileprivate func convertToOptionalNSAttributedStringKeyDictionary(_ input: [String: Any]?) -> [NSAttributedString.Key: Any]? 
        guard let input = input else  return nil 
        return Dictionary(uniqueKeysWithValues: input.map  key, value in (NSAttributedString.Key(rawValue: key), value))

用法

   // Set Navigation bar Title color

UINavigationBar.appearance().titleTextAttributes = convertToOptionalNSAttributedStringKeyDictionary([NSAttributedString.Key.foregroundColor.rawValue : UIColor.white])

【讨论】:

【参考方案8】:

对于 Swift 5,如果有人像我一样环顾四周:

self.navigationController?.navigationBar.largeTitleTextAttributes = [NSAttributedString.Key.foregroundColor : UIColor(displayP3Red: 84/255, green: 93/255, blue: 118/255, alpha: 1)]

【讨论】:

对于那些登陆 iOS15 的用户,您需要将上述值添加到 UINavigationBarAppearance 并在导航栏上进行设置。 UINavigationBarAppearance是iOS13引入的,(13和14我没测试过)

以上是关于如何在 swift 4 中更改 NavBar 标题文本颜色?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 react-bootstrap 中更改 NavBar 切换按钮中的线条颜色?

Bootstrap 4 Dropdown Navbar 使用 Plus 和 Minus Fontawesome 5 更改插入符号

Swift ios 10 NavBar Item 不断增长

如何在 React.JS 中更改登录/注销时的导航栏文本?

swift 使Navbar大标题

当 UIStepper 在 Swift 4 中以编程方式点击时如何更改 UILabel 的文本,如果它们都在 UITableViewCell 中?