自定义 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
我正在尝试更改 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