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
相关产品推荐
相关产品推荐

