iOS 自定义 tabbar 的 badgeValue显示样式

时间:2024-03-14 17:07:46

系统的 tabbar 中设置tabbarItem.badgeValue 后显示样式是红色的小数字,由于UI在设计 app 界面时考虑到风格统一的问题,那么就需要让 badgeValue 背景色,文字颜色有所改变.通过遍历所有 tabbar 内部子 view 没有发现某个 view 时可以改变这个 badgeValue 的样式的,通过查找 subLayer 方式也没有找到控制着这个 badgeValue 显示的 layer.

能不能通过自定义 badgeValue方式去显示满足我们的需求呢?


iOS 自定义 tabbar 的 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 自定义 tabbar 的 badgeValue显示样式
iOS 自定义 tabbar 的 badgeValue显示样式


iOS 10以后出现了新的api 可以直接设置 badgValue显示样式


iOS 自定义 tabbar 的 badgeValue显示样式

如果不考虑适配 iOS10以下系统的话,可以使用上边给出的新的api,需要适配其他 iOS 版本的话可以考虑我写的这个 BKBadgeValue ,你在使用过程中有任何问题都可以联系作者 : 教授哥哥 1060545231

以上代码部分已放到 github 上边 : https://github.com/ZhaoBingDong/BKBadgeValue[https://github.com/ZhaoBingDong/BKBadgeValue]