系统的 tabbar 中设置tabbarItem.badgeValue 后显示样式是红色的小数字,由于UI在设计 app 界面时考虑到风格统一的问题,那么就需要让 badgeValue 背景色,文字颜色有所改变.通过遍历所有 tabbar 内部子 view 没有发现某个 view 时可以改变这个 badgeValue 的样式的,通过查找 subLayer 方式也没有找到控制着这个 badgeValue 显示的 layer.
能不能通过自定义 badgeValue方式去显示满足我们的需求呢?
答案是肯定的,这里有写好的自定义BKTabbar 一个 UITabbar 的子类和一个 UITabBbarItem+Extension 的分类,完美的解决了这个问题
使用起来也比较简单
使用方法
1 需要自定义 TabBarController 通过 KVC 方式替换 tabbarControoler 的 tabBar
let newTabbar = BKTabbar(frame: self.tabBar.frame)
// 需要先给 tabbarcontroller 设置 viewControllers 已经 tabbarItem 属性 包括 image selectImage 才可以替换掉系统的 tabbar
newTabbar.items = self.tabBar.items
// badgeValue 的文字颜色
newTabbar.badgeValueTextColor = UIColor.black
// badgeValue 背景色
newTabbar.badgeValueBackgroundColor = UIColor.yellow
self.setValue(newTabbar, forKey: "tabBar")
2 self.tabBarItem.badgeValue = "100"
通过 UIViewControler 的 tabBarItem.badgeValue 属性设置 badgeValue的值 , 跟系统的 badgeValue 设置方式一致,只是屏蔽了系统的实现方法,改成自定义 badgeValue 的显示样式
注意 不能通过 self.tabbarController.tabbarItem.badgeValue 去设置自定义 badgeValue 显示内容,因为这 self.tabbarController.tabbarItem 获取的这个 UITabBarItem 跟 UITabbar 内部的 Item数组里的所有 UITabbarItem 都不一样,所以就无法去修改 badgeValue 的值,但是可以用viewController.tabBarItem.badgeValue 去设置badgeValue 的值
iOS 10以后出现了新的api 可以直接设置 badgValue显示样式
如果不考虑适配 iOS10以下系统的话,可以使用上边给出的新的api,需要适配其他 iOS 版本的话可以考虑我写的这个 BKBadgeValue ,你在使用过程中有任何问题都可以联系作者 : 教授哥哥 1060545231
以上代码部分已放到 github 上边 : https://github.com/ZhaoBingDong/BKBadgeValue[https://github.com/ZhaoBingDong/BKBadgeValue]
好了,我是大兵布莱恩特,欢迎加入博主技术交流群,iOS 开发交流群
![QQ20180712-0.png](https://upload-images.jianshu.io/upload_images/1155481-9b84a3a3fce64f61.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)