Cannot Set Navigation Bar Font in Swift on Latest

2019-06-18 15:33发布

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)

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条回答
淡お忘
2楼-- · 2019-06-18 16:15

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()]
查看更多
在下西门庆
3楼-- · 2019-06-18 16:23

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 .

查看更多
唯我独甜
4楼-- · 2019-06-18 16:29

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()]
查看更多
地球回转人心会变
5楼-- · 2019-06-18 16:29
override func viewWillLayoutSubviews() {

    self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor(), NSFontAttributeName : UIFont(name: "Roboto-Regular", size: 14)!]
}
查看更多
Summer. ? 凉城
6楼-- · 2019-06-18 16:33

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!

查看更多
登录 后发表回答