SwiftUI NavigationStack 滑動返回失效
SwiftUI NavigationStack 滑動返回失效
1. 問題
在 SwiftUI 用 NavigationStack 時,iOS 原生的「從左邊滑動返回上一頁」功能突然失效了。
畫面可以正常 push 進去,但滑動手勢完全沒反應,只能按左上角的返回按鈕。
2. 原因
NavigationStack 裡面的 View 如果加了 .padding(),在某些情況下會干擾到系統的 edge swipe gesture。
這不是每次都會發生,但當 padding 影響到最外層的 hit test 區域時,手勢辨識就會失敗。
3. 解法
把 NavigationStack 內層不必要的 .padding() 拿掉。
修改前
1
2
3
4
NavigationStack {
SomeView()
.padding() // 這個會讓滑動返回壞掉
}
修改後
1
2
3
4
NavigationStack {
SomeView()
// 如果真的需要 padding,用內部元件各自加,不要加在最外層
}
4. 重點
- 這是 SwiftUI 的已知行為,不是你的程式有 bug
- 症狀很像是 gesture 被吃掉了,但其實是 hit test 區域被改變
- 如果你在
NavigationStack裡面要加 padding,盡量加在子 View 的內部,不要加在最外層
This post is licensed under CC BY 4.0 by the author.