在 SwiftUI 中,如果你使用:
.navigationBarBackButtonHidden(true)
可以隐藏系统返回按钮,但会发现 右滑返回手势(边缘返回)失效了。
这是因为 SwiftUI 底层使用了 UINavigationController
,隐藏返回按钮后,系统默认禁用了手势。
通过扩展 UINavigationController
恢复手势代理:
@retroactive
)extension UINavigationController: @retroactive UIGestureRecognizerDelegate {
open override func viewDidLoad() {
super.viewDidLoad()
interactivePopGestureRecognizer?.delegate = self
}
public func gestureRecognizerShouldBegin(_ gesture: UIGestureRecognizer) -> Bool {
return viewControllers.count > 1
}
}
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
即可,简单有效,全局生效。
欢迎点赞、收藏、评论交流