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://www.pswp.cn/diannao/86930.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/86930.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/86930.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

練習小項目11:鼠標跟隨小圓點

🎯 項目目標: 當鼠標在頁面移動時,小圓點會跟隨鼠標移動的位置,帶有平滑動畫。 🧠 實現思路: HTML: 頁面內放一個 div 作為圓點。 CSS: 圓點使用絕對定位,初始在屏幕…

華為:eSight網管平臺使用snmp納管交換機

一、SNMP簡介 SNMP(Simple Network Management Protocol,簡單網絡管理協議)是一種用于管理和監控網絡設備的標準協議,廣泛應用于路由器、交換機、服務器、打印機等網絡設備的管理場景。以下是對它的簡單介紹: 1、SNM…

【單片機期末】接口及應用

一、C51語言基礎 【考點】存儲類型 data是低128字節 code是ROM idata是高128字節 pdata是外部RAM可以用R0 R1尋址的,也叫頁 xdata是外部RAM,可以用DPTR尋址或總線擴展 其中data、code、idata、pdata、xdata均為字節類型的,bdata是對位尋址的 …

C#迭代器

文檔 C# Iterators 關鍵內容 普通接口 public interface IEnumerable {IEnumerator GetEnumerator(); }public interface IEnumerator {object Current { get; }bool MoveNext();void Reset(); }泛型接口 public interface IEnumerable<out T> : IEnumerable {IEnum…

Java多線程:為什么wait()必須用循環而非if?

在Java多線程編程中&#xff0c;調用wait()方法時應使用**循環結構&#xff08;while循環&#xff09;**而非if塊&#xff0c;這是由線程同步的特性和潛在風險決定的。以下是具體原因和實現規范&#xff1a; 一、正確調用方式 synchronized (lockObject) {while (!condition) …

Fiori 初學記錄----怎么調用后端系統odata 服務實現簡單的CURD

1.對上面的內表做一個簡單的增刪改查的操作 SEGW 創建odata 項目&#xff0c;實現增刪改查方法。如下圖 2.odata 準備完畢后&#xff0c;打開vscode 下一步等待項目生成 把下面這個目錄的視圖&#xff1a;替換一下&#xff1a; View1.view.xml 代碼&#xff1a; <…

OpenCV CUDA模塊圖像變形------對圖像進行GPU加速的仿射變換函數warpAffine()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 該函數用于對圖像進行 GPU 加速的仿射變換&#xff08;Affine Transformation&#xff09;&#xff0c;是 cv::warpAffine 的 CUDA 版本。支持平…

語音增強方法

一、音量增強 音量增強&#xff0c;顧名思義就是音量的調大和調小&#xff0c;通過對音量進行增強可以使得模型更好的泛化。防止數據只有小音量時&#xff0c;當有大音量傳入時模型不能很好的進行識別。 下面是我對音量增強生成頻譜圖進行可視化的結果 上面的一個圖片是音量…

內網滲透測試技巧與利用操作手冊(SMB / MSSQL / LDAP)

SMB 枚舉與利用清單 &#x1f50d; SMB 枚舉與連接 # 嘗試空會話連接&#xff08;Null Session&#xff09; smbclient -N -U "" -L \\<IP> smbclient -N -U "test" -L \\<IP> smbclient -N -U "Guest" -L \\<IP># 下載共享…

ADB(Android Debug Bridge)Android官方調試工具及常用命令

ADB的定義 ADB&#xff08;Android Debug Bridge&#xff09;是Android官方提供的調試工具&#xff0c;屬于Android SDK的一部分。它通過命令行與Android設備通信&#xff0c;支持安裝應用、調試、文件傳輸、日志抓取等功能&#xff0c;適用于開發、測試及高級用戶場景。 ADB工…

再現重大BUG,微軟緊急撤回Win 11六月更新

BUG年年有&#xff0c;今年特別多&#xff01; Windows 11發布這近4年來&#xff0c;咱們算是一路見證了其「要么在修復BUG&#xff0c;要么在修復BUG路上」這么一件壯舉。 最新的6月Windows 11 24H2更新&#xff08;版本號KB5060842&#xff09;&#xff0c;微軟帶來了多項改…

ROS2 工作空間中, CMakeLists.txt, setup.py和 package.xml的作用分別是?

提問 ROS2 工作空間中, CMakeLists.txt&#xff0c; setup.py和 package.xml的作用分別是&#xff1f; 回答 在一個 ROS 2 包&#xff08;package&#xff09;里&#xff0c;這三個文件各司其職&#xff1a; package.xml 作用&#xff1a;聲明包的元信息和依賴關系&#xff…

Untiy打包安卓踩坑

Untiy 版本&#xff1a;unity6.1 運行環境&#xff1a;Win11 報錯一&#xff1a; Assembly ‘Assets/ExternalDependencyManager/Editor/1.2.183/Google.IOSResolver.dll’ will not be loaded due to errors: 解決方法&#xff1a;通過在 Unity Hub 中下載 iOS 包來解決 報錯…

2025最新版!Windows Python3 超詳細安裝圖文教程(支持 Python3 全版本)

大家好&#xff0c;我是你們的編程搬磚工~ 今天給大家安排一篇超級詳細、超接地氣、純小白友好的《Python 安裝教程 for Windows》&#xff0c;從下載到安裝&#xff0c;從環境變量到驗證&#xff0c;手把手帶你裝好 Python&#xff0c;不管你是 Python3.7、3.9、3.10 還是 3.1…

【IEEE/EI/Scopus檢索】2025年第五屆機器學習與大數據管理國際會議 (MLBDM 2025)

2025年第五屆機器學習與大數據管理國際會議 (MLBDM 2025) 2025 5th International Conference on Machine Learning and Big Data Management(MLBDM 2025)會議地點&#xff1a;南京&#xff0c;中國 時間&#xff1a;2025年12月26日- 28日 ● 會議簡介 2025年第五屆機器學習…

前端實現ios26最新液態玻璃效果!

先看效果圖 實現步驟 先定義玻璃元素和液態濾鏡 <!--玻璃容器--> <div class"glass-container"><!--使用液態濾鏡--><div class"glass-filter"></div><!--邊沿效果--><div class"glass-specular">…

麒麟系統集成開發環境Kylin-IDE初體驗,菜鳥小白入門教程

一、安裝Kylin-IDE 1、打開應用商店&#xff0c;轉到“軟件”->“開發”頁面&#xff0c;找到“Kylin-IDE”&#xff0c;點下載。&#xff08;也可以在搜索欄搜索Kylin-IDE&#xff09; 2、等待Kylin-IDE下載并自動安裝完成。 3、雙擊桌面的Kylin-IDE圖標。 4、自動彈出“開…

Python爬蟲實戰:研究Bleach庫相關技術

一、引言 1.1 研究背景與意義 隨著互聯網的快速發展,網絡上的數據量呈爆炸式增長。網絡爬蟲作為一種自動獲取網頁內容的技術,能夠高效地從互聯網上收集所需信息,為數據分析、信息檢索、輿情監測等應用提供基礎。然而,爬取到的網頁內容往往包含大量的 HTML 標簽、JavaScri…

分布假設學習筆記

文章目錄 分布假設學習筆記自然語言處理中的分布假設應用場景適用范圍 Word2vec、BERT和GPTWord2vecBERTGPT 假設成立嗎 分布假設學習筆記 自然語言處理中的分布假設 分布假設&#xff08;Distributional Hypothesis&#xff09;是指&#xff1a;詞語在相似上下文中出現&…

提升開發思維的設計模式(上)

1. 設計模式簡介 [設計模式]&#xff08;Design pattern&#xff09; 是解決軟件開發某些特定問題而提出的一些解決方案也可以理解成解決問題的一些思路。通過設計模式可以幫助我們增強代碼的[可重用性]、可擴充性、 可維護性、靈活性好。我們使用設計模式最終的目的是實現代碼…