所以我正在编写这个应用程序,其中包含彩色导航栏和该栏中标题的字体,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我在每一行中都会出错,我真的不知道,意味着什么......
文本属性是[NSObject:AnyObject]?。这正是我写下来的。有人有解决方案吗?
答案 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()]