自定义 UITabBarItem 的文本颜色和字体会导致 swift 出现奇怪的结果

Customizing text color AND font of UITabBarItem causing weird result in swift

我正在尝试更改 UITabBarItems 的文本并使用了 等问题。除非我尝试调整 UITabBarItem 的字体,否则第二个答案对我来说非常有用。此代码段生成选定文本为白色且未选定项目为浅灰色的预期结果:

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

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

不过,如果加上这个:

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

由于某种原因,文本在选中和取消选中时都变成黑色,字体保持不变。

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

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)

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

unrecognized selector sent to instance 0x7fa6d9461ef0

这对我来说没有任何意义

尝试以下方法

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)

对于iOS10及以上,您只需将字体更改为.normal,这将影响选中和未选中项目的字体。

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

此外,您可以在不使用 .setTitleTextAttributes 的情况下设置 tintColors,如下所示:

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