更改导航栏标题字体 - 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的主要内容,如果未能解决你的问题,请参考以下文章

更改导航栏项目字体大小

iOS更改导航栏标题字体和颜色

Bootstrap 更改导航栏字体大小

更改后退导航栏按钮的字体

在 Swift 中更改导航栏颜色

在swift 4下更改导航控制器后退按钮的字体