Cannot Set Navigation Bar Font in Swift on Latest Xcode Version

The following code was running fine before updating to Xcode 6.1 to stay up with iOS 8.1:

override func viewDidAppear(animated: Bool) {  
     self.navigationController?.navigationBar.topItem?.title = "Home"
     self.navigationController?.navigationBar.titleTextAttributes = [ NSFontAttributeName: UIFont(name: "Lobster 1.4", size: 34),  NSForegroundColorAttributeName: UIColor.whiteColor()]
}

The issue is specifically in NSFontAttributeName: UIFont(name: "Lobster 1.4", size: 34)

  • Xib file: Can't drag a View from a xib file to a swift file
  • Xcode — groups and targets
  • OpenGL ES 2.0 - Textured Quad
  • Why does Xcode stop giving text prediction?
  • Load different Storyboard for iPhone 5 @ app start
  • Error in breakpoint condition
  • and the error I’m getting here is:

    ! "Could not find an overload for 'init' that accepts the supplied arguments"

    I found this original code on a different StackOverflow question and it was working as expected until this update (downloaded it yesterday). My font is indeed installed properly.

    Should I be writing this code differently now, or is there an entirely new way in which I should set my Navigation Bar Font?

    Thanks!

    5 Solutions Collect From Internet About “Cannot Set Navigation Bar Font in Swift on Latest Xcode Version”

    Whoops. I figured this out on my own:

    I needed an exclamation point following my declaration of the NSFontAttributeName as it requires a type “NSString!”. Perhaps it only required an “NSString” before, but I have no issues now.

    Working line:

    NSFontAttributeName: UIFont(name: "Lobster 1.4", size: 24)!
    

    Working full code:

    override func viewDidAppear(animated: Bool) {  
         self.navigationController?.navigationBar.topItem?.title = "Home"
         self.navigationController?.navigationBar.titleTextAttributes = [ NSFontAttributeName: UIFont(name: "Lobster 1.4", size: 34)!,  NSForegroundColorAttributeName: UIColor.whiteColor()]
    }
    

    Seems like a silly question now. Hope this helps someone else!

    You are using UIFont(name: intializer as it is defined as

    init?(name fontName: String, size fontSize: CGFloat) -> UIFont

    failable intializer read more from link.So it is returning optional.You need to unwrap it as it require AnyObject not optional.

     self.navigationController?.navigationBar.titleTextAttributes = [ NSFontAttributeName: UIFont(name: "Lobster 1.4", size: 34)!,  NSForegroundColorAttributeName: UIColor.whiteColor()]
    

    Thanks Benji!!!

    I changed it a bit and applied it to the appearance attribute of the navigation controller.

        var navigationBarAppearance = UINavigationBar.appearance()
    
        navigationBarAppearance.titleTextAttributes = [ NSFontAttributeName: UIFont(name: "OpenSans", size: 16)!,  NSForegroundColorAttributeName: UIColor.whiteColor()]
    

    It is better to declare your font as conditional , like this way :

     if let font = UIFont (name: "AdobeArabic-BoldItalic", size: 20) {
                UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName: font]
            }
    

    Doing this , makes sure that your font is already found , that I have installed new font , and when used it without conditional if , it issued an exception , of unwrapping an optional .

    override func viewWillLayoutSubviews() {
    
        self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor(), NSFontAttributeName : UIFont(name: "Roboto-Regular", size: 14)!]
    }