当前位置: 首页 > news >正文

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 即可,简单有效,全局生效。


欢迎点赞、收藏、评论交流 🙌

相关文章:

  • 系统架构设计师 1
  • Java 传输较大数据的相关问题解析和面试问答
  • 【prometheus+Grafana篇】基于Prometheus+Grafana实现postgreSQL数据库的监控与可视化
  • OmoFun动漫官网,动漫共和国最新入口|网页版
  • [Java恶补day24] 整理模板·考点三【二分查找】
  • 如何VMware虚拟机扩容磁盘,有很详细图文
  • leetcode HOT 100(128.连续最长序列)
  • 基于Netty的TCP Server端和Client端解决正向隔离网闸数据透传问题
  • [智能客服project] 架构 | 对话记忆 | 通信层
  • 事务传播行为详解
  • 基于RK3588,飞凌教育品牌推出嵌入式人工智能实验箱EDU-AIoT ELF 2
  • [Rviz2报错,已解决!]导入urdf模型错误:Could not load mesh resource 。。。
  • 微机原理与接口技术,期末习题(二)
  • 基于Three.js的交互式国风博物馆设计与实现
  • 【白雪讲堂】当前GEO是否能追溯数据源?
  • Ubuntu 与 Windows 实现文件夹共享
  • ubuntu 系统 多条命令通过 bash 脚本执行
  • [python]pycddlib使用案例
  • day30 模块和库的导入
  • Docker Windows 配置国内镜像源方法
  • 网站运营方法/河南网站建设哪里好
  • 关于网站建设中原创文章的一些想法/西安做网站哪家好
  • 一级a做受片免费网站/营销型网站建设哪家好
  • 自建团队网站开发要多少钱/百度旧版本下载
  • 微信里的小程序怎么制作方法/运营推广seo招聘
  • 徐州有哪些做网站/长沙网