我有一个Master-> Detail应用。 DetailView显示一个模式表。在纵向的iPhone XR上这可以正常工作。但是在横向视图中,模式表不会出现在DetailView的顶部,而是出现在MasterView的顶部。
如何预防?
我正在模式表中使用NavigationView。如果删除它,问题似乎就消失了。除了我不再需要标题和关闭按钮之外。
这是主视图的定义:
struct ContentView: View {
var body: some View {
NavigationView {
List {
NavigationLink(destination: DetailView()) {
Text ("Master 1")
}
NavigationLink(destination: DetailView()) {
Text ("Master 2")
}
}
.navigationBarTitle(Text("Master"))
}
}
}
按一行将显示模式表:
struct DetailView: View {
@State var isPresented = false
var body: some View {
List {
Button("Detail 1") {
self.isPresented = true
}
Button("Detail 2") {
self.isPresented = true
}
}
.navigationBarTitle(Text("Detail"))
.sheet(isPresented: $isPresented, content: {
SheetView()
})
}
}
模式表依赖于NavigationView具有标题和关闭按钮。但是结果是,模态将以常规(横向)显示在主视图的顶部。
struct SheetView: View {
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
var body: some View {
NavigationView { // Mandatory for Title and Button
Form {
Text("Modal 1")
Text("Modal 2")
}
.navigationBarTitle(Text("Some Modal"))
.navigationBarItems(
trailing: Button(action: {
self.presentationMode.wrappedValue.dismiss()
}) {
Text("Close")
})
}
}
}
答案 0 :(得分:2)
问题是您的SheetView中的NavigationView,也使用了景观尺寸类,这意味着Sheet视图是隐藏的。在SheetView中,强制将其压缩,这将解决您的问题:
struct SheetView: View {
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
var body: some View {
NavigationView { // Mandatory for Title and Button
Form {
Text("Modal 1")
Text("Modal 2")
}
.navigationBarTitle(Text("Some Modal"))
.navigationBarItems(
trailing: Button(action: {
self.presentationMode.wrappedValue.dismiss()
}) {
Text("Close")
})
}.environment(\.horizontalSizeClass, .compact)
}
}
答案 1 :(得分:0)
NavigationView {
...
}
.navigationViewStyle(StackNavigationViewStyle())
PS:.environment(\.horizontalSizeClass, .compact)
可能对我有帮助,但在我的情况下失败了。