You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:19:43