SwiftUI隐藏返回按钮保留右滑手势方案
SwiftUI 隐藏返回按钮但保留右滑返回手势的方案
在 SwiftUI 中,如果你使用:
.navigationBarBackButtonHidden(true)
可以隐藏系统返回按钮,但会发现 右滑返回手势(边缘返回)失效了。
这是因为 SwiftUI 底层使用了 UINavigationController
,隐藏返回按钮后,系统默认禁用了手势。
✅ 目标
- 隐藏系统返回按钮
- 保留 iOS 原生右滑返回手势
- 支持自定义返回按钮
🛠 解决方案
通过扩展 UINavigationController
恢复手势代理:
Swift 5.9+(使用 @retroactive
)
extension UINavigationController: @retroactive UIGestureRecognizerDelegate {open override func viewDidLoad() {super.viewDidLoad()interactivePopGestureRecognizer?.delegate = self}public func gestureRecognizerShouldBegin(_ gesture: UIGestureRecognizer) -> Bool {return viewControllers.count > 1}
}
Swift 5.8 及以下
extension UINavigationController: UIGestureRecognizerDelegate {open override func viewDidLoad() {super.viewDidLoad()interactivePopGestureRecognizer?.delegate = self}public func gestureRecognizerShouldBegin(_ gesture: UIGestureRecognizer) -> Bool {return viewControllers.count > 1}
}
⚠️ 注意事项
使用方式 | 是否影响右滑返回 |
---|---|
.navigationBarBackButtonHidden(true) | ✅ 可用(需手动恢复) |
.navigationBarHidden(true) | ❌ 禁用手势 |
嵌套新的 NavigationStack | ❌ 禁用手势 |
✅ 总结
如果你想在 SwiftUI 中:
- 自定义返回按钮
- 隐藏系统返回按钮
- 保留右滑返回手势
使用上述方式扩展 UINavigationController
即可,简单有效,全局生效。
欢迎点赞、收藏、评论交流 🙌