【发布时间】:2019-08-01 13:53:44
【问题描述】:
SwiftUI 对.sheet 有一些我无法解决的意外行为。这是一个使用相同模式的简单主 > 详细视图。一个在NavigationView 另一个在.navigationBarItems:
struct MasterView: View {
@State var showModal: Bool = false
var modal: some View {
ModalView(showModal: $showModal)
}
var body: some View {
NavigationView {
VStack {
Button("Can be dismissed") { self.showModal = true }.sheet(isPresented: $showModal) { self.modal }
NavigationLink(destination: DetailView()) { Text("Can't be dismissed") }
}
}
}
}
struct DetailView: View {
@State var showModal: Bool = false
var modal: some View {
ModalView(showModal: $showModal)
}
var body: some View {
Text("Detail View")
.navigationBarItems(trailing: Button("Dismisss?") { self.showModal = true }.sheet(isPresented: $showModal) { self.modal })
}
}
struct ModalView: View {
@Binding var showModal: Bool
var body: some View {
VStack {
Text("Modal View")
Button("Dismiss") { self.showModal = false }
}
}
}
问题是,尽管ModalView 可以从MasterView 中的Button 中消除,但它不能用DetailView 中的.navigationBarItems 消除
有人知道如何关闭从.navigationBarItems 调用的.sheet 吗?
编辑:有趣的是,如果你切换
Text("Detail View")
与
Button("Can Dismiss") { self.showModal = true }.sheet(isPresented: $showModal) { self.modal }
您会得到非常意外的结果,导致 .navigationBarItems 被禁用,除非通过拖动手势关闭模式
编辑 2:此行为现在已作为错误提交,ID 为:FB6891155
【问题讨论】:
标签: swiftui