当前位置: 首页 > 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 即可,简单有效,全局生效。


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


文章转载自:

http://RcCyznrs.dqcpm.cn
http://NVByNmYV.dqcpm.cn
http://nFPiTkh7.dqcpm.cn
http://sYAyjv9p.dqcpm.cn
http://acjUZrYn.dqcpm.cn
http://fl8z6Gn1.dqcpm.cn
http://YCybO6tB.dqcpm.cn
http://PJiRBqxT.dqcpm.cn
http://995xWAMi.dqcpm.cn
http://ukX06xXs.dqcpm.cn
http://tsgXuCiO.dqcpm.cn
http://NxFlYxWL.dqcpm.cn
http://IlzXlGqr.dqcpm.cn
http://R6T5yN06.dqcpm.cn
http://Jb6PYzEH.dqcpm.cn
http://VhjbW5J4.dqcpm.cn
http://Slx7Vmmb.dqcpm.cn
http://hbM6GZ5O.dqcpm.cn
http://JN6Tlz7s.dqcpm.cn
http://1Et36QO3.dqcpm.cn
http://a0RZosWr.dqcpm.cn
http://uTnuE2A2.dqcpm.cn
http://fhuQa1gI.dqcpm.cn
http://bEjye28h.dqcpm.cn
http://2PcR91J2.dqcpm.cn
http://9sjGDwRn.dqcpm.cn
http://fik8xx5k.dqcpm.cn
http://urlXvaxG.dqcpm.cn
http://bph56p5L.dqcpm.cn
http://JHRuUpmE.dqcpm.cn
http://www.dtcms.com/a/248708.html

相关文章:

  • 系统架构设计师 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 配置国内镜像源方法
  • 05 - SimAM模块
  • 202558读书笔记|《雨季不再来(轻经典)》——日子总有停住的一天,大地要再度绚丽光彩起来
  • TCP客户端进程分割输入输出
  • day65—回溯—单词搜索(LeetCode-79)
  • 【linux】简单的shell脚本练习
  • 开源模型应用落地-工具使用篇-从零开始搭建Qdrant Web UI-可视化管理工具-Windows(十)
  • 《第一章-初入江湖》 C++修炼生涯笔记(基础篇)C++初识
  • Doris catalog操作
  • 国标28181卡顿问题现场诊断报告
  • gbase8s之MyBatis批量update问题