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

App启动时UITabBarItem未激活,如何设置使其启动即激活?

解决UITabBarItem启动时未激活的问题

我之前也踩过这个一模一样的坑!启动时第一个TabBarItem看起来没激活,点一下就正常了,主要是因为TabBarItem的设置时机或者选中状态的触发顺序有问题,给你几个靠谱的解决办法:

方法1:提前设置TabBarItem(推荐)

不要等到viewDidLoad里再给ViewController设置TabBarItem,而是在创建ViewController实例的时候就配置好。这样TabBarController初始化时就能拿到完整的TabBarItem信息,正确渲染选中状态:

// 创建TodayViewController实例时直接设置TabBarItem
let todayViewController = TodayViewController()
todayViewController.tabBarItem = UITabBarItem(
    title: "Today",
    image: #imageLiteral(resourceName: "TodayTabBarItem").withRenderingMode(.alwaysOriginal),
    selectedImage: #imageLiteral(resourceName: "SunTabBarItemSelected").withRenderingMode(.alwaysOriginal)
)

// 同理处理ForecastViewController
let forecastViewController = ForecastViewController()
forecastViewController.tabBarItem = UITabBarItem(
    title: "Forecast",
    image: #imageLiteral(resourceName: "ForecastTabBarItem").withRenderingMode(.alwaysOriginal),
    selectedImage: #imageLiteral(resourceName: "ForecastTabBarItemSelected").withRenderingMode(.alwaysOriginal)
)

// 再配置TabBarController
let tabBarController = UITabBarController()
tabBarController.viewControllers = [todayViewController, forecastViewController]
window.rootViewController = tabBarController
window.makeKeyAndVisible()
// 默认selectedIndex就是0,这里可以不用额外设置,如果还是有问题可以加上:
// tabBarController.selectedIndex = 0

这里加withRenderingMode(.alwaysOriginal)是为了避免系统把图片当成模板渲染导致颜色失真,确保你的选中/未选中图片能正确显示原本的样子。

方法2:调整selectedIndex的设置顺序

如果不想改TabBarItem的设置时机,可以试试把selectedIndex的设置移到设置viewControllers之后,设置rootViewController之前,让TabBarController在被添加到窗口前就确认好选中状态:

let tabBarController = UITabBarController()
tabBarController.viewControllers = [todayViewController, forecastViewController]
tabBarController.selectedIndex = 0 // 先设置选中索引
window.rootViewController = tabBarController
window.makeKeyAndVisible()

方法3:强制刷新选中状态

如果上面两种方法都没生效,可以在窗口激活后,手动指定选中的TabBarItem,强制触发渲染:

window.makeKeyAndVisible()
// 手动选中第一个item
tabBarController.tabBar.selectedItem = tabBarController.tabBar.items?.first

为什么会出现这个问题?

大概率是你在ViewController的viewDidLoad里设置TabBarItem,而此时TabBarController已经完成了初始渲染,系统没有自动更新第一个Item的选中状态。提前设置TabBarItem能让TabBarController在初始化阶段就获取到正确的Item配置,自然就能正确显示激活状态了。

内容的提问来源于stack exchange,提问作者Alexey Shvachka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:14:51