2014-10-09 56 views
11

所以我写这个程序有丰富多彩navigationbars并在这条标题的字体和UIBarButtonItems的字体应该是白色的,并在特定的字体。我用这两条线来完成,在AppDelegate中..的Xcode 6.1 titleTextAttributes

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] ?.这正是我写下来的。有没有人有这个解决方案?

回答

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()] 
+0

没错,就是它!非常感谢你。我认为这是一个初始者可以返回零,但它是有道理的非常混乱。:) – Ben 2014-10-09 08:27:23

+0

爱它谢谢! – 2015-01-10 02:16:17