SwiftUI-关闭第二个模式表不起作用

时间:2020-06-15 12:45:16

标签: swiftui

我的应用程序在模式表中显示项目详细信息。用户可以在该模式表中打开编辑模式。因此,我使用.sheet(item) {}来呈现模态,具体取决于模态类型(详细信息或编辑)。一切正常,除了两件事:

问题1.状态转换之间的模态短暂消失

在进入“编辑模式”时(例如,背景为红色),我简要地看到了编辑控件,然后模式消失了,最后在模式中显示了编辑屏幕。为什么状态之间会消失模态?这是放慢的动画:

animation

问题2。无法以编程方式关闭第二个模式

处于“编辑”模式时,无法以编程方式将其关闭。但是,相同的代码在“详细信息”模态下有效

下面是代码的一部分:

struct ContentView: View {

    @State var modalType: ModalType?

    var body: some View {

        Button("Show details") {
            self.modalType = .details
        }
        .sheet(item: $modalType) { type in
            self.modal(for: type)
        }
    }

    private func modal(for type: ModalType) -> AnyView {

        switch type {
        case .details:
            return AnyView(
                VStack(spacing: 30) {
                    Text("Details").font(.largeTitle)
                    Button("Edit") { self.modalType = .edit }
                    Button("Close") { self.modalType = nil } // this works
                }
            )
        case .edit:
            return AnyView(
                VStack(spacing: 30) {
                    Text("Edit").font(.largeTitle)
                    Button("Close") { self.modalType = nil } // this doesn't work if opened from Details
                }
                .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
                .background(Color.red)
            )
        }
    }
}

enum ModalType: String, Equatable, Identifiable {

    case details = "details"
    case edit = "edit"

    var id: String {
        return rawValue
    }
}

PS。我正在使用xCode 11.5。

0 个答案:

没有答案