Swift点击已选中UITabBarItem时禁用pop到根控制器的动画效果
实现方案
核心思路是拦截点击已选中tab的系统默认行为,主动执行无动画的pop到根控制器操作,替换系统默认的带动画操作:
- 保留UITabBarController的代理设置,替换你之前用于完全禁止pop行为的代理方法代码为以下实现:
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool { // 判定当前点击的是否为已经选中的tab对应控制器 guard viewController === tabBarController.selectedViewController else { // 非当前选中tab,走系统默认选中逻辑 return true } // 取出当前tab对应的导航控制器,主动执行无动画pop到根 if let navigationController = viewController as? UINavigationController { navigationController.popToRootViewController(animated: false) } // 阻止系统默认的带动画pop行为 return false }
注意事项
- 如果你的tabItem对应的根控制器不是直接为UINavigationController(比如嵌套了其他自定义容器控制器),需要自行调整代码获取到对应层级的UINavigationController实例再执行pop操作
- 该方案完全保留了pop到根控制器的业务逻辑,仅关闭了切换动画,不会影响其他tab的正常切换行为
内容的提问来源于stack exchange,提问作者user883884
相关产品推荐
相关产品推荐

