【问题标题】:How do I change navigationBar font in Swift?如何在 Swift 中更改导航栏字体?
【发布时间】:2014-10-12 20:04:59
【问题描述】:

这是我迄今为止尝试过的,但收到错误消息(我已正确地将 CaviarDreams 实施到项目中):

self.navigationController.navigationBar.titleTextAttributes = NSFontAttributeName[UIFont .fontWithName(CaviarDreams.ttf, size: 20)]

错误提示:Use of unresolved identifier 'CaviarDreams

【问题讨论】:

    标签: swift uinavigationbar navigationbar


    【解决方案1】:

    试试这个:

    self.navigationController.navigationBar.titleTextAttributes = [ NSFontAttributeName: UIFont(name: "CaviarDreams", size: 20)!]
    

    编辑:现在,UIFont 必须解包才能在此处使用。

    Swift 5(+对可选UIFont的安全处理)

    self.navigationController?.navigationBar.titleTextAttributes = [ NSAttributedString.Key.font: UIFont(name: "Caviar-Dreams", size: 20) ?? UIFont.systemFont(ofSize: 20)]
    

    【讨论】:

    • 工作就像一个魅力,谢谢。已经为此摸索了一个小时左右,试图自己弄清楚,Swift 你知道,对它有点陌生。 :P
    • 注意:NSFontAttributeName 现在是 String 类型,因此此代码不起作用。
    • @Dehli 不明白如何解决这个问题。你有什么建议吗?
    • NSFontAttributeName 仍然是一个字符串。我认为 Dehli 的意思是 UIFont(...) 现在返回一个 UIFont?而不是 UIFont。有关详细信息,请参阅 UIFont.h。 benaneesh 的回答解决了您在升级到最新 Xcode 时会看到的与这些相关的错误。
    • 对于 Swift 4,NSFontAttributeName 已重命名。现在是titleTextAttributes = [NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: 23)]
    【解决方案2】:

    使用 Swift,我将其添加到 AppDelegate.swift

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
            // Override point for customization after application launch.
    
            UINavigationBar.appearance().titleTextAttributes = [
                NSFontAttributeName: UIFont(name: "DINNextLTW04-Regular", size: 20)!
            ]
    
            return true
        }
    

    希望对你有帮助!

    【讨论】:

    • 你的解决方案很棒。
    • 模仿你我的朋友:)
    • 更好的方法。谢谢!
    • NSFontAttributeName 现在改为 --->> NSAttributedStringKey.font
    【解决方案3】:

    斯威夫特 2.0:

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
            UINavigationBar.appearance().titleTextAttributes = [
                NSFontAttributeName: UIFont(name: "Arial-Regular", size: 30)!
            ]
    
            return true
        }
    

    或者

     override func viewDidLoad() {
      super.viewDidLoad()
    
      self.navigationController?.navigationBarHidden =  false
      self.title = "SAMPLE"
    
    //Set Color
      let attributes: AnyObject = [ NSForegroundColorAttributeName: UIColor.redColor()]
      self.navigationController!.navigationBar.titleTextAttributes = attributes as? [String : AnyObject]
    
    
    //Set Font Size
      self.navigationController!.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "Arial", size: 37.0)!];
    
     }
    

    【讨论】:

    • 嗨,Alvin,当我在 viewDidLoad() (xcode 7.3.1) 中输入您的字体大小行时,它可以正常编译,但在(模拟器)运行时它会因 EXC_BAD_INSTRUCTION(代码=EXC_1386_INVOP,子代码)而崩溃=0x0) 带有控制台消息“致命错误:在展开可选值时意外发现 nil”。我在选项卡式视图模板的 FirstViewController 中有导航栏。你有什么建议吗?谢谢
    • 现在有效:UINavigationBar.appearance().titleTextAttributes = [ NSForegroundColorAttributeName : UIColor.blueColor(), NSFontAttributeName : UIFont(name: "Bradley Hand", size: 28)! ]
    【解决方案4】:

    现在你必须先解开(!)它,所以它不是UIFont?类型:

    self.navigationController.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "<font-name>", size: <size>)!]
    

    【讨论】:

      【解决方案5】:

      对于 Swift 2.3

      self.navigationController!.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "Roboto-Bold", size: 20.0)!, NSForegroundColorAttributeName : UIColor.whiteColor()];
      

      【讨论】:

        【解决方案6】:

        斯威夫特 4

        if let font = UIFont(name: "FontName", size: 16) {
        
         self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.font: font]
        
        }
        

        或者作为其他答案建议在 AppDelegate 上进行:

          if let font = UIFont(name: "FontName", size: 16) {
        
            UINavigationBar.appearance().titleTextAttributes = [
                  NSAttributedStringKey.font: font]
        
        }
        

        【讨论】:

          【解决方案7】:

          斯威夫特 4.2

          更改大标题

          self.navigationController!.navigationBar.largeTitleTextAttributes = [.font: UIFont.systemFont(ofSize: 22)]
          

          更改小标题 当布局向下滚动时

          self.navigationController!.navigationBar.titleTextAttributes = [.font: UIFont.systemFont(ofSize: 14)]
          

          【讨论】:

            【解决方案8】:

            斯威夫特 4.2

             self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.font: UIFont(name: "Helvetica", size: 18.0)!]
            

            【讨论】:

            • 您可以只使用.font 而不是NSAttributedString.Key.font
            【解决方案9】:

            斯威夫特 4.2

            func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
              // Override point for customization after application launch.
            
              let font = UIFont(name: "FontName", size: 16) ?? UIFont.systemFont(ofSize: 16)
              UINavigationBar.appearance().titleTextAttributes = [.font: font]
            }
            

            【讨论】:

              猜你喜欢
              • 2014-12-23
              • 2017-01-19
              • 2018-02-13
              • 2016-06-20
              • 2011-08-15
              • 2018-07-26
              • 2014-07-21
              • 1970-01-01
              • 2014-09-01
              相关资源
              最近更新 更多