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

iOS 15下UITabBarItem自定义文字、角标颜色不生效该如何解决?

解决方案

核心原因

iOS 15 对 UITabBar 渲染逻辑做了重构,直接对 UITabBarItem 设置的标题属性、角标颜色会被 UITabBarAppearance 配置的全局样式覆盖,必须通过外观对象统一配置才能生效。

适配代码

你可以在原有逻辑的基础上增加版本判断,同时兼容新旧系统:

private func updateTabBar() {
    guard let items = tabBar.items,
        tabViewControllers.count == items.count else {
        return
    }

    // iOS15+ 新适配逻辑
    if #available(iOS 15.0, *) {
        let appearance = UITabBarAppearance()
        // 配置普通状态下的Item文字属性
        appearance.stackedLayoutAppearance.normal.titleTextAttributes = Self.normalAttributes
        // 如有需要可同时配置选中状态文字属性
        // appearance.stackedLayoutAppearance.selected.titleTextAttributes = Self.selectedAttributes
        // 配置角标颜色
        appearance.stackedLayoutAppearance.normal.badgeBackgroundColor = .customColor
        
        // 横竖屏、iPad适配可补充配置其他布局样式
        // appearance.inlineLayoutAppearance.normal.titleTextAttributes = Self.normalAttributes
        // appearance.compactInlineLayoutAppearance.normal.titleTextAttributes = Self.normalAttributes
        
        // 赋值给两种状态的外观
        tabBar.standardAppearance = appearance
        tabBar.scrollEdgeAppearance = appearance
    }

    // 保留原有逻辑兼容iOS14及更低版本
    for (item, vc) in zip(items, tabViewControllers) {
        item.setTitleTextAttributes(Self.normalAttributes, for: .normal)
        item.badgeColor = .customColor
    }
}

注意点

  • 如果你的App存在横竖屏切换、iPad适配场景,需要同时给 inlineLayoutAppearance、compactInlineLayoutAppearance 两个布局的外观做相同配置,避免横屏/平板场景下样式失效
  • 选中态的文字、图片属性也需要对应配置到 stackedLayoutAppearance.selected 下才会生效

内容的提问来源于stack exchange,提问作者Valentin Shamardin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:06:03