如何在 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 更改插入符号
当 UIStepper 在 Swift 4 中以编程方式点击时如何更改 UILabel 的文本,如果它们都在 UITableViewCell 中?