【问题标题】:change navigation bar title font - swift更改导航栏标题字体 - swift
【发布时间】:2017-01-19 04:48:18
【问题描述】:

我的导航栏中有一个标题,我想将其更改为自定义字体。我找到了这行代码,但它适用于您有导航控制器的情况。

self.navigationController?.navigationBar.titleTextAttributes = [ NSFontAttributeName: UIFont(name: "LeagueGothic-Regular", size: 16.0)!, 
                                                             NSForegroundColorAttributeName: UIColor.whiteColor()]

但我没有任何导航控制器。我手动将导航栏添加到我的视图中。

如何更改评论字体?

【问题讨论】:

  • 在导航栏的引用上调用titleTextAttributes

标签: ios swift navigationbar


【解决方案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(),请参阅stackoverflow.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

        我将向您展示我们如何在公司项目中做到这一点。

        1. 我们创建了一个UINavigationController 子类。
        2. viewDidLoad中写下我们的定制代码。
        3. 让故事板文件中的每个导航控制器都继承 来自它。

        这非常好,原因不止一个。原因之一是中心点的变化。一旦我们更改了类中的某些内容,所有导航控制器都会监听它。

        这就是我们的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)!]
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-01-14
              • 1970-01-01
              • 2014-07-21
              • 1970-01-01
              • 1970-01-01
              • 2023-03-09
              • 2020-04-01
              • 2014-10-12
              相关资源
              最近更新 更多