我的应用程序在模式表中显示项目详细信息。用户可以在该模式表中打开编辑模式。因此,我使用.sheet(item) {}
来呈现模态,具体取决于模态类型(详细信息或编辑)。一切正常,除了两件事:
在进入“编辑模式”时(例如,背景为红色),我简要地看到了编辑控件,然后模式消失了,最后在模式中显示了编辑屏幕。为什么状态之间会消失模态?这是放慢的动画:
处于“编辑”模式时,无法以编程方式将其关闭。但是,相同的代码在“详细信息”模态下有效
下面是代码的一部分:
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。