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

Xcode 13 下 viewController.tabBarItem.badgeColor 设置失效如何解决?

失效原因

从iOS 15(Xcode 13默认适配iOS 15 SDK)开始,UITabBarItem的badgeColor等旧属性优先级低于新推出的UITabBarAppearance体系,直接赋值不会生效,只有全局配置Appearance的逻辑可以跑通。

动态修改单个Tab角标颜色的适配方案

你可以直接修改对应ViewController关联的UITabBarItem的独立Appearance属性,不会影响全局配置和其他Tab的样式,适配代码如下:

func updateTabItemBadgeColor(for viewController: UIViewController, color: UIColor) {
    if #available(iOS 13.0, *) {
        // 读取原有itemAppearance,避免覆盖之前的全局字体、文字颜色等配置
        let standardItemAppear = viewController.tabBarItem.standardAppearance ?? UITabBarItemAppearance()
        // 同步修改普通、选中状态下的角标背景色,按需调整
        standardItemAppear.normal.badgeBackgroundColor = color
        standardItemAppear.selected.badgeBackgroundColor = color
        viewController.tabBarItem.standardAppearance = standardItemAppear

        // iOS 15+ 额外适配scrollEdge状态
        if #available(iOS 15.0, *) {
            let scrollEdgeItemAppear = viewController.tabBarItem.scrollEdgeAppearance ?? UITabBarItemAppearance()
            scrollEdgeItemAppear.normal.badgeBackgroundColor = color
            scrollEdgeItemAppear.selected.badgeBackgroundColor = color
            viewController.tabBarItem.scrollEdgeAppearance = scrollEdgeItemAppear
        }
    } else {
        // iOS 13以下系统继续使用原有API
        viewController.tabBarItem.badgeColor = color
    }
}

需要动态修改的时候直接调用上面的方法即可,修改后系统会自动刷新TabBar的展示效果。

注意事项

如果你的App支持横屏、iPad分屏等场景,还需要同步修改UITabBarItemAppearance的inlineLayoutAppearance、compactLayoutAppearance对应的角标属性,避免横竖屏切换后样式异常。

内容的提问来源于stack exchange,提问作者BiNo。

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:45:00