禁用SwiftUI导航查看滑动到弹出功能



我使用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()})

最新更新