我使用SwiftUI NavigationView导航到三个页面。导航工作正常,我可以转到我想要的页面,然后使用后退按钮返回到上一页。
我的问题是,每当我从屏幕最左边滑动时,它就会弹出我的当前屏幕。
每当我从屏幕的最左边拖动时,我的当前屏幕也会移动,显示堆栈中的前一个屏幕,然后弹出所述当前屏幕。
有没有办法禁用这个功能?
第二页至第一页
第一页至着陆
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()
}
}
第二页.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
只需在您的自定义后退按钮中调用disse((:
.navigationBarItems(leading: Button("Back"){dismiss()})