如果父视图中已经存在一个 sheet,那么在 SwiftUI 中无法在子视图中呈现 sheet。

3

在SwiftUI中,是否有可能在父视图中已经有Sheet的情况下,在子视图中呈现Sheet?

struct SheetTest: View {
    @State var showFirstSheet = false
  
    var body: some View {
        VStack {
            Text("FirstView")
                .onTapGesture(count: 1, perform: {
                    showFirstSheet = true
                })
            SomeView()
        }
        .sheet(isPresented: $showFirstSheet, content: {
            Text("firstsheet")
        })
            
    }
}
struct SomeView:View {
    @State var showSecondSheet = false
    var body: some View {
        Text("SecondView")
            .onTapGesture(count: 1, perform: {
                showSecondSheet = true
            })
            .sheet(isPresented: $showSecondSheet, content: {
                Text("secondsheet")
            })
    }
}

我目前正在使用Xcode 12 beta 3!第二个表格不能以这种方式呈现!我必须在父视图中呈现它!


是的,你不能这样做。这是已知问题。对于.alert也是如此。向Apple提交反馈- 提交的越多,越好。 - Asperi
谢谢!我会提交。 - amin torabi
1个回答

3
解决方法是小心不要将“.sheet”添加到同一视图树中。
我正在使用Xcode 12.1(12A7403)。
struct SheetTest: View {
    @State var showFirstSheet = false

    var body: some View {
        VStack {
            Text("FirstView")
                .onTapGesture(count: 1, perform: {
                    showFirstSheet = true
                })
                .sheet(isPresented: $showFirstSheet, content: {
                    Text("firstsheet")
                })
            SomeView()
        }
    }
}
struct SomeView:View {
    @State var showSecondSheet = false
    var body: some View {
        Text("SecondView")
            .onTapGesture(count: 1, perform: {
                showSecondSheet = true
            })
            .sheet(isPresented: $showSecondSheet, content: {
                Text("secondsheet")
            })
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接