UITabBarController角标颜色问题:点击第4标签后需保持橙色
解决UITabBar选中后角标颜色变灰的问题
嘿,这个问题我之前也踩过坑!原因其实是系统默认会在UITabBarItem被选中时,覆盖你全局设置的badgeColor,用选中状态下的默认灰色。要让第4个标签的角标保持橙色,我们可以从这两个方向入手:
方法一:刷新角标时同步设置颜色
直接修改你现有的onMoreTabRefresh函数,在设置badgeValue后,手动给这个特定的TabBarItem设置badgeColor,这样就能覆盖选中状态的默认颜色:
func onMoreTabRefresh() { if let tabbarItem = tabBarViewController.tabBar.items?[RootTab.More.rawValue] { tabbarItem.badgeValue = "8" // 强制设置当前item的角标颜色为橙色 tabbarItem.badgeColor = UIReferences.Color.badgeOrangeColor } }
方法二:通过TabBar代理统一处理
如果希望每次切换到这个标签时都能稳定保持橙色,我们可以利用UITabBarControllerDelegate的代理方法,在标签被选中时实时修正颜色:
首先给你的TabBarController添加代理扩展:
extension YourTabBarController: UITabBarControllerDelegate { func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) { guard let selectedItem = tabBarController.tabBar.selectedItem else { return } // 判断选中的是More标签(用你的枚举值来匹配) if selectedItem == tabBarController.tabBar.items?[RootTab.More.rawValue] { selectedItem.badgeColor = UIReferences.Color.badgeOrangeColor } // 如果你想让所有标签的角标都保持橙色,直接去掉上面的判断即可 // selectedItem.badgeColor = UIReferences.Color.badgeOrangeColor } }
然后记得在你的TabBarController初始化代码里设置代理:
override func viewDidLoad() { super.viewDidLoad() self.delegate = self }
这样不管是主动刷新角标还是切换标签,More标签的角标都会一直保持你想要的橙色啦!
内容的提问来源于stack exchange,提问作者Ramesh Kumar
相关产品推荐
相关产品推荐

