如果您需要在整个应用程序中(例如每个导航按钮)完全更改字体样式,则首选方法是使用
UIBarButtonItem.appearance()
代理。
示例代码片段如下:
SWIFT 3.0+
let customFont = UIFont(name: "customFontName", size: 17.0)!
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: customFont], for: .normal)
当涉及到字体样式的时候,把代码片段放在AppDelegate.swift
文件的开头是明智的选择,因为每次应用程序启动时都需要进行字体样式化。此外,您可以将此代码放置在任何其他地方(例如Presenter
类)中,以进行UI样式化和自定义。一旦执行了该代码,所有的BarButtons都将在其之后被自定义。
但是作为一个真正的Swift程序员,您应该首先可选解包您的字体,如果找不到或加载字体时遇到任何其他可能的问题,最终回退到系统字体。
var textAttributes: [String:Any]
let fontColor = UIColor.purple
let barItemCustomFont = UIFont(name: "", size: 14)
if let customFont = barItemCustomFont {
textAttributes = [NSForegroundColorAttributeName: fontColor, NSFontAttributeName: customFont]
} else {
textAttributes = [NSForegroundColorAttributeName: fontColor]
}
UIBarButtonItem.appearance().setTitleTextAttributes(textAttributes, for: .normal)
实际应用举例
在实际的应用程序中,通常需要自定义UINavigationBar
和UIBarButton
字体样式(除其他参数外),以使它们在视觉上保持一致。
下面是一个方便的stylizeNavigationFontOfMyAmazingApp
函数,您可以使用:
func stylizeNavigationFontOfMyAmazingApp() {
let customFont = UIFont(name: "someFancyFont", size: 16)!
UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().barTintColor = UIColor.blue
var fontAttributes: [String: Any]
fontAttributes = [NSForegroundColorAttributeName: UIColor.red, NSFontAttributeName: customFont]
UINavigationBar.appearance().titleTextAttributes = fontAttributes
UIBarButtonItem.appearance().setTitleTextAttributes(fontAttributes, for: .normal)
}
使用appearance()
代理的优点
- 只需两行代码,即可为您的应用程序/项目中的每个
UIBarButtonItem
设置样式。
- 您可以混合几个类的
appearance()
代理,以获得真正独特的视觉风格。
- 如果您需要更进一步的定制控制,则可以在具体的
UIBarButtonItem
实例上再次重新自定义每个按钮(例如,在特定实例上放置自定义视图、按钮、图像等)。
参考资料
Apple文档关于appearance
协议的说明。