更改导航栏标题字体 - swift
Posted
技术标签:
【中文标题】更改导航栏标题字体 - swift【英文标题】:change navigation bar title font - swift 【发布时间】:2017-01-19 04:48:18 【问题描述】:我的导航栏中有一个标题,我想将其更改为自定义字体。我找到了这行代码,但它适用于您有导航控制器的情况。
self.navigationController?.navigationBar.titleTextAttributes = [ NSFontAttributeName: UIFont(name: "LeagueGothic-Regular", size: 16.0)!,
NSForegroundColorAttributeName: UIColor.whiteColor()]
但我没有任何导航控制器。我手动将导航栏添加到我的视图中。
如何更改评论字体?
【问题讨论】:
在导航栏的引用上调用titleTextAttributes
。
【参考方案1】:
试试这个:
Objective-C
[[UINavigationBar appearance] setTitleTextAttributes:attrsDictionary];
斯威夫特 3
self.navigationController.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "CaviarDreams", size: 20)!]
斯威夫特 4
self.navigationController.navigationBar.titleTextAttributes = [NSAttributedStringKey.font: UIFont(name: "CaviarDreams", size: 20)!]
【讨论】:
只是为了澄清这个答案,fontname
应该是 UIFont
类型,而不仅仅是作为字符串的字体名称。
是的,例如 let font = UIFont(name: "Lato-Light.ttf", size: 34)。 @大卫威廉姆斯
完全正确 :) 虽然它是“Lato-Light”而不是“Lato-Light.tff”:P
另请注意,此答案会影响所有导航栏,而不仅仅是这个特定的导航栏。
我收到了这个错误。无法分配“UIFont”类型的值?键入 [String: Any]?迅速 3.【参考方案2】:
如何在 Swift 中为每个视图控制器设置字体的正确方法(使用外观代理):
Swift 5(和 4.2)
let attributes = [NSAttributedString.Key.font: UIFont(name: "HelveticaNeue-Light", size: 17)!]
UINavigationBar.appearance().titleTextAttributes = attributes
斯威夫特 4
let attributes = [NSAttributedStringKey.font: UIFont(name: "HelveticaNeue-Light", size: 17)!]
UINavigationBar.appearance().titleTextAttributes = attributes
斯威夫特 3
let attributes = [NSFontAttributeName: UIFont(name: "HelveticaNeue-Light", size: 17)!]
UINavigationBar.appearance().titleTextAttributes = attributes
【讨论】:
对于 ios 13 及更高版本,使用UINavigationBarAppearance()
,请参阅***.com/a/61712504/4439983
如果您的导航栏设置为prefersLargeTitles = true
,它们都不起作用。如果您有该设置并且想要更改标题字体样式,请使用navigationController?.navigationBar.largeTitleTextAttributes = [.font: UIFont(name: "CustomFont"), size: 20), .foregroundColor: UIColor.black]
【参考方案3】:
您也可以在 Storyboard 中执行此操作,Xcode 10.1 中存在一个错误,这样做也是克服此问题的技巧。
第 1 步 - 从字体中选择 系统
第 2 步 - 然后再次选择 自定义,它将显示所有字体。
【讨论】:
即使在Xcode 10.2.1
中,此解决方法也有效(或必需)。谢谢?
在界面生成器中生效,但在模拟器中运行时导航栏不显示字体变化。【参考方案4】:
SWIFT 4.x
在 iOS 11.x 上更改 Normal 和 Large Title 的导航栏标题字体
let navigation = UINavigationBar.appearance()
let navigationFont = UIFont(name: "Custom_Font_Name", size: 20)
let navigationLargeFont = UIFont(name: "Custom_Font_Name", size: 34) //34 is Large Title size by default
navigation.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: navigationFont!]
if #available(iOS 11, *)
navigation.largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: navigationLargeFont!]
导航栏中的大标题必须设置为true。
【讨论】:
【参考方案5】:Swift 5 简单方法
//Programatically
self.navigationController!.navigationBar.titleTextAttributes = [NSAttributedString.Key.font: UIFont(name: "Helvetica Neue", size: 40)!]
物理上
【讨论】:
【参考方案6】:斯威夫特 5
navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.font: UIFont(descriptor: UIFontDescriptor(name: "American Typewriter Bold", size: 36), size: 36)]
【讨论】:
【参考方案7】:斯威夫特 5
我将向您展示我们如何在公司项目中做到这一点。
-
我们创建了一个
UINavigationController
子类。
在viewDidLoad
中写下我们的定制代码。
让故事板文件中的每个导航控制器都继承
来自它。
这非常好,原因不止一个。原因之一是中心点的变化。一旦我们更改了类中的某些内容,所有导航控制器都会监听它。
这就是我们的UINavigationController
子类的外观。
从工作项目中复制粘贴。
import UIKit
class NavigationController: UINavigationController
// MARK: Navigation Controller Life Cycle
override func viewDidLoad()
super.viewDidLoad()
setFont()
// MARK: Methods
func setFont()
// set font for title
self.navigationBar.titleTextAttributes = [NSAttributedString.Key.font: UIFont(name: "Al-Jazeera-Arabic", size: 20)!]
// set font for navigation bar buttons
UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedString.Key.font: UIFont(name: "Al-Jazeera-Arabic", size: 15)!], for: UIControl.State.normal)
【讨论】:
【参考方案8】:要在导航栏的引用上调用 titleTextAttributes,请使用:
let attributes = [NSAttributedStringKey.font: UIFont(name: "Helvetica", size: 17)!]
self.navigationController?.navigationBar.titleTextAttributes = attributes
【讨论】:
【参考方案9】: self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.font: UIFont(name: "Lato-Semibold", size: 17)!,NSAttributedStringKey.foregroundColor : UIColor.white]
【讨论】:
虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性的 cmets 挤满你的代码,这会降低代码和解释的可读性!【参考方案10】:Swift 4.2 Xcode 10
self.navigationController!.navigationBar.titleTextAttributes = [NSAttributedStringKey.font: UIFont(name: "Sacramento-Regular", size: 19)!]
【讨论】:
以上是关于更改导航栏标题字体 - swift的主要内容,如果未能解决你的问题,请参考以下文章