系統的 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]