Ios SwiftUI无法取消显示的第二张工作表

Ios SwiftUI无法取消显示的第二张工作表,ios,swift,swiftui,Ios,Swift,Swiftui,我有一个带有“Show sheet”按钮的快捷界面视图,当按下该按钮时,我想在工作表上显示第一个视图。该视图有一个按钮可以自行关闭。如果再次按下“显示工作表”按钮,现在我想显示工作表上的第二个视图,它还有“关闭”按钮。代码如下: struct FirstSheetView: View { @Binding var isPresented: Bool var body: some View { Button("Dismiss") {

我有一个带有“Show sheet”按钮的快捷界面视图,当按下该按钮时,我想在工作表上显示第一个视图。该视图有一个按钮可以自行关闭。如果再次按下“显示工作表”按钮,现在我想显示工作表上的第二个视图,它还有“关闭”按钮。代码如下:

struct FirstSheetView: View {
    @Binding var isPresented: Bool

    var body: some View {
       Button("Dismiss") {
                self.isPresented = false
            }
    }
}

struct SecondSheetView: View {
    @Binding var isPresented: Bool

    var body: some View {
       Button("Dismiss") {
                self.isPresented = false
            }
    }
}

enum ActiveSheet {
   case first, second
}

struct ContentView: View {
    @State private var isShowingPhotoSheet = false
    @State private var activeSheet: ActiveSheet = .first

    var body: some View {
            VStack {
                Button(action: {
                    self.isShowingPhotoSheet.toggle()
                }) {
                    Text("Show sheet")
                }
            }
            .sheet(
                isPresented: $isShowingPhotoSheet,
                onDismiss: loadSecondView,
                content: {
                    if self.activeSheet == .first {
                        FirstSheetView(isPresented: self.$isShowingPhotoSheet)
                    } else {
                        SecondSheetView(isPresented: self.$isShowingPhotoSheet)
                    }
                }
            )
    }

    private func loadSecondView() {
            activeSheet = .second
            self.isShowingPhotoSheet.toggle()

    }
}

工作表显示得很好,我可以关闭第一张工作表,但不能关闭第二张工作表(只需向下滑动),但按下“关闭”按钮似乎没有任何作用。可能是什么问题?

问题是
onDismiss
设置第二张表为时过早,第一张表仍在屏幕上,并已绑定到状态

这里有一个解决方案。使用Xcode 11.4/iOS 13.4进行测试

private func loadSecondView() {
    if activeSheet == .second {
        activeSheet = .first
    } else {
        activeSheet = .second

        // give time to close first sheet
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
            self.isShowingPhotoSheet = true
        }
    }
}