在Swift中更改导航栏字体

8

我想要更改导航栏的字体。然而,下面的代码无法生效,它会导致应用程序崩溃。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName: UIFont(name: "Lato-Light.ttf", size: 34)!]

     return true
}

我遇到了以下错误:

致命错误:在解包可选值时意外地发现了 nil(lldb)

我确实将字体Lato-Light.ttf添加到了我的项目中,所以应该能够找到它。

2个回答

18
UIFont() 是一个可失败的初始化器,它可能由于多种原因而失败。强制使用 ! 进行解包会导致应用程序崩溃。
最好单独初始化并检查成功情况:
if let font = UIFont(name: "Lato-Light.ttf", size: 34) {
    UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName: font]
}

请检查您的字体文件是否包含在捆绑资源中。

添加自定义字体到您的iOS App时常见错误


我尝试添加println("Code executes"),但它没有打印到控制台,所以很明显代码的那部分没有执行。我正在使用我的应用程序中的字体,所以我知道它在那里。我想知道为什么它找不到字体? - Lasse Kristensen
我该如何检查它是否被包含?抱歉,我有点新手。 - Lasse Kristensen
我在我的回答中包含了一个链接。 - zisoft
我搞定它了!谢谢。错误是因为我必须删除.ttf文件。谢谢! - Lasse Kristensen
我建议在UIFont上创建扩展,并在其中添加字体。类似于颜色等->以后更容易重新配置。例如:扩展UIFont { class var navbarTitleFont: UIFont { return UIFont(name: "HelveticaNeue", size: 20) ?? UIFont.systemFontOfSize(20) } - Nat
显示剩余3条评论

2
import UIKit

class TestTableViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        configureView()

    }

    func configureView() {

        // Change the font and size of nav bar text
        if let navBarFont = UIFont(name: "HelveticaNeue-Thin", size: 20.0) {
            let navBarAttributesDictionary: [NSObject: AnyObject]? = [
                NSForegroundColorAttributeName: UIColor.whiteColor(),
                NSFontAttributeName: navBarFont
            ]
            navigationController?.navigationBar.titleTextAttributes = navBarAttributesDictionary
        }
    }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接