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

iOS 13及以上版本中,如何在单个ViewController修改UITabBar颜色属性?

iOS 13+ 特定ViewController中修改UITabBar颜色属性的实现方法

在iOS 13及以上版本中,Apple引入了UITabBarAppearance类来统一管理TabBar的样式配置,这比直接修改旧的tintColor等属性更灵活,也能适配不同的布局模式(如堆叠、紧凑等)。以下是在特定ViewController中修改TabBar颜色属性的具体实现:

1. 在目标ViewController中修改TabBar样式

在目标VC的viewWillAppear方法中,创建并配置UITabBarAppearance实例,然后将其应用到TabBar上:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    
    // 初始化TabBar外观配置
    let tabBarAppearance = UITabBarAppearance()
    
    // 设置TabBar背景色
    tabBarAppearance.backgroundColor = .systemTeal
    
    // 配置选中状态的标题和图标颜色
    let selectedAppearance = tabBarAppearance.stackedLayoutAppearance.selected
    selectedAppearance.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
    selectedAppearance.iconColor = .white
    
    // 配置未选中状态的标题和图标颜色
    let normalAppearance = tabBarAppearance.stackedLayoutAppearance.normal
    normalAppearance.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.lightGray]
    normalAppearance.iconColor = .lightGray
    
    // 应用配置到TabBar,同时处理滚动到边缘时的样式(iOS13+必填)
    if let tabBar = tabBarController?.tabBar {
        tabBar.standardAppearance = tabBarAppearance
        tabBar.scrollEdgeAppearance = tabBarAppearance
    }
}

2. 离开ViewController时恢复原样式(可选)

如果需要在离开当前VC时恢复TabBar的原有样式,可以先保存原配置,再在viewWillDisappear中恢复:

// 在VC类中定义属性保存原样式
private var originalStandardAppearance: UITabBarAppearance?
private var originalScrollEdgeAppearance: UITabBarAppearance?

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    
    // 保存原有样式
    originalStandardAppearance = tabBarController?.tabBar.standardAppearance
    originalScrollEdgeAppearance = tabBarController?.tabBar.scrollEdgeAppearance
    
    // 此处添加上面的修改样式代码
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    
    // 恢复原有样式
    if let tabBar = tabBarController?.tabBar {
        tabBar.standardAppearance = originalStandardAppearance ?? UITabBarAppearance()
        tabBar.scrollEdgeAppearance = originalScrollEdgeAppearance ?? tabBar.standardAppearance
    }
}

关键说明

  • stackedLayoutAppearance适用于大多数常规TabBar布局;如果你的TabBar使用紧凑布局(如iPad横屏),可替换为inlineLayoutAppearance或compactInlineLayoutAppearance。
  • 若仅需修改选中状态的图标和标题颜色,也可以直接设置tabBar.tintColor = .white,但背景色必须通过UITabBarAppearance的backgroundColor属性配置。
  • scrollEdgeAppearance用于处理TabBar滚动到屏幕边缘时的样式(如导航栏滚动隐藏时),iOS13+必须设置,否则会出现样式不一致的问题。

内容的提问来源于stack exchange,提问作者Mahdi Moqadasi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 05:50:37