自定义文本颜色和UITabBarItem的字体导致怪异导致swift

时间:2015-12-30 22:21:16

标签: swift fonts ios9 uitabbaritem

我正在尝试更改UITabBarItems的文字并使用了诸如this之类的问题。除非我尝试调整UITabBarItem的字体,否则第二个答案对我很有用。此片段生成所选文本的预期结果为白色,未选中的项目为浅灰色:

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.blackColor()], forState:.Normal)

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.whiteColor()], forState:.Selected)

enter image description here

但是,如果添加:

UITabBarItem.appearance().setTitleTextAttributes([NSFontAttributeName:UIFont(name: "American Typewriter", size: 13)!], forState: .Selected)

enter image description here

由于某种原因,当文本被选中和未被选中时文本变为黑色,并且字体保持不变。

如果我在最后一个片段中将.Selected更改为.Normal,那么很奇怪,所选文本会变为白色,文本会与代码中的字体相匹配。

enter image description here

UITabBarItem.appearance().setTitleTextAttributes([NSFontAttributeName:UIFont(name: "American Typewriter", size: 13)!], forState: .Normal)

这几乎是完美的,但是未选择的文本现在没有变化。我不确定我做错了什么或这是一个错误,但如果有任何其他方法来完成这项任务,我很乐意听到它。

根据dfri的评论,我试过这个:

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.blackColor(),
        NSFontAttributeName : [NSFontAttributeName:UIFont(name: "American Typewriter", size: 13)!]], forState:.Selected)

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.whiteColor(),
        NSFontAttributeName : [NSFontAttributeName:UIFont(name: "American Typewriter", size: 13)!]], forState:.Normal)

现在应用程序崩溃了。错误说:

  

无法识别的选择器发送到实例0x7fa6d9461ef0

这对我没有任何意义

2 个答案:

答案 0 :(得分:18)

尝试以下

let colorNormal : UIColor = UIColor.blackColor()
let colorSelected : UIColor = UIColor.whiteColor()
let titleFontAll : UIFont = UIFont(name: "American Typewriter", size: 13.0)!

let attributesNormal = [
    NSForegroundColorAttributeName : colorNormal,
    NSFontAttributeName : titleFontAll
]

let attributesSelected = [
    NSForegroundColorAttributeName : colorSelected,
    NSFontAttributeName : titleFontAll
]

UITabBarItem.appearance().setTitleTextAttributes(attributesNormal, forState: .Normal)
UITabBarItem.appearance().setTitleTextAttributes(attributesSelected, forState: .Selected)

答案 1 :(得分:3)

对于iOS 10及更高版本(可能在下面工作,没有测试),您只需更改.normal的字体,这将影响选定和未选定项目上的字体。

UITabBarItem.appearance().setTitleTextAttributes([NSFontAttributeName : UIFont.myMediumFont(withSize: 10)], for: [.normal])

此外,您可以设置tintColors而不使用.setTitleTextAttributes,如下所示:

UITabBar.appearance().unselectedItemTintColor = UIColor.white
UITabBar.appearance().tintColor = UIColor.black