[英]Disable SwiftUI NavigationView Swipe to Pop feature
我正在使用 SwiftUI NavigationView 導航到三個頁面。 導航工作正常,我可以 go 到我想要的頁面和 go 使用后退按鈕返回上一頁。
我的問題是每當我從屏幕的最左側滑動時,它都會彈出我當前的屏幕。
每當我從屏幕的最左側拖動時,我的當前屏幕也會移動,顯示堆棧中的前一個屏幕,然后彈出所述當前屏幕。
有沒有辦法禁用此功能?
ContentView.swift
import SwiftUI
struct ContentView: View {
@State var destinationKey: String? = nil;
var body: some View {
NavigationView{
VStack{
Text("Hello, world! Landing Page")
.padding()
Button(action: {
destinationKey = "pageOne"
}) {
Text("Go To Page One")
.padding()
}
}
.background(
NavigationLink(destination: PageOne(), tag: ("pageOne"), selection: $destinationKey){
EmptyView()
}
)
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
PageOne.swift
import SwiftUI
struct PageOne: View {
var body: some View {
VStack{
Text("Hello, World! Page One")
NavigationLink(destination: PageTwo(), label: {
Text("Go To Page Two")
.padding()
})
}
}
}
struct PageOne_Previews: PreviewProvider {
static var previews: some View {
PageOne()
}
}
PageTwo.swift
import SwiftUI
struct PageTwo: View {
var body: some View {
Text("Hello, World! Page Two")
}
}
struct PageTwo_Previews: PreviewProvider {
static var previews: some View {
PageTwo()
}
}
截至目前,禁用滑動關閉的唯一方法是禁用后退按鈕:
.navigationBarBackButtonHidden(true)
如果您希望仍然有一個后退按鈕,您可以創建一個自定義的:
.navigationBarItems(leading: Button("Back"){self.presentationMode.wrappedValue.dismiss()})
注意:此代碼放置在呈現視圖中,記得做
@Environment(\.presentationMode) var presentationMode
在 iOS 14 及之前的結構中,或者如果您在 iOS 15 上,您可以簡單地執行以下操作:
@Environment(\.dismiss) var dismiss
只需在您的自定義后退按鈕中調用dismiss():
.navigationBarItems(leading: Button("Back"){dismiss()})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.