Xcode 6.1 titleTextAttributes

时间:2014-10-09 07:06:12

标签: swift xcode6

所以我正在编写这个应用程序,其中包含彩色导航栏和该栏中标题的字体,UIBarButtonItems的字体应为白色和特定字体。我在AppDelegate中用这两行来完成它。

    UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName : UIFont(name: "SourceSansPro-Regular", size: 22), NSForegroundColorAttributeName : UIColor.whiteColor()]
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName : UIFont(name: "SourceSansPro-Regular", size: 22), NSForegroundColorAttributeName : UIColor.whiteColor()], forState: .Normal)

但是使用Xcode 6.1我在每一行中都会出错,我真的不知道,意味着什么......

enter image description here

文本属性是[NSObject:AnyObject]?。这正是我写下来的。有人有解决方案吗?

1 个答案:

答案 0 :(得分:37)

我认为问题是因为他们已经在6.1中更改了UIFont的初始化程序,因此它可以返回nil。这是正确的行为,因为如果输入错误的字体名称,则无法实例化UIFont。在这种情况下,您的词典变为[NSObject: AnyObject?],与[NSObject: AnyObject]不同。您可以先初始化字体,然后使用if let语法。以下是如何执行此操作

let font = UIFont(name: "SourceSansPro-Regular", size: 22)
if let font = font {
    UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName : font, NSForegroundColorAttributeName : UIColor.whiteColor()]
}

或者如果您确定字体对象不是nil,您可以使用隐式解包的可选语法。在这种情况下,您将承担运行时崩溃的风险。这是怎么做的。

UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName : UIFont(name: "SourceSansPro-Regular", size: 22)!, NSForegroundColorAttributeName : UIColor.whiteColor()]