簡體   English   中英

禁用 SwiftUI NavigationView 滑動到彈出功能

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM