基础视图中的@Environment改变时自动弹出

问题描述 投票:0回答:0

ContentView
中,我们为 NavigationView 设置了一个修饰符,用于检查屏幕是
.compact
还是
.regular
。当我们按下
NavigationLink
时,我们进入下一个屏幕。如果我们在 iPad 上开始多任务处理(同时打开 2 个应用程序)并将我们的应用程序屏幕从小变为大,我们就会弹出
NavigationLink
。有没有办法防止这种情况。

struct ContentView: View {
    @State var isPresented = false
    @Environment(\.presentationMode) var presentationMode
    
    var body: some View {
        NavigationView {
            VStack {
                NavigationLink {
                    Button("Dismiss") {
                        presentationMode.wrappedValue.dismiss()
                    }
                } label: {
                    Text("Click me")
                }
                .navigationTitle("Tab 1")
            }
        }
        .navigationViewStyle(.stack)
        .modifier(DummyModifier(isPresented: $isPresented))
    }
}

struct DummyModifier: ViewModifier {
    @Binding var isPresented: Bool
    @Environment(\.horizontalSizeClass) private var horizontalSizeClass
    
    func body(content: Content) -> some View {
        Group {
            if horizontalSizeClass == .compact {
                content
                    .sheet(isPresented: $isPresented) {
                        Text("Sheet")
                    }
            } else {
                content
                    .fullScreenCover(isPresented: $isPresented) {
                        Text("Fullscreen")
                    }
            }
        }
    }
}
swift swiftui navigation environment viewmodifier
© www.soinside.com 2019 - 2024. All rights reserved.