如何在横向 SwiftUI 的 Master-Detail1-Detail2 视图中显示缺少的后退按钮?
How to display missing back button in Master-Detail1-Detail2 view in SwiftUI in landscape?
我正在使用 NavigationView 和 NavigationLinks 从 MasterView 移动到 Detail1View,然后进一步移动到 Detail2View。
在纵向模式的 iPhone 上,所有详细视图都显示后退按钮,允许从 Detail2View 返回 Detail1View,然后进一步返回 MasterView。
但是在 iPhone 横向模式或 iPad 上,当从 Detail1View 移动到 Detail2View 时,没有后退按钮。因此不可能返回到 Detail1View。
添加第二个 NavigationView 允许有一个后退按钮,但这并不是真正理想的解决方法,因为第二个 UINavigationViewController 显示在第一个下方。
struct MyMasterView: View {
private let names = ["Homer", "Marge", "Bart", "Lisa"]
var body: some View {
List() {
Section(header: Text("The Simpsons")) {
ForEach(names, id: \.self) { name in
NavigationLink(destination: MyDetail1View(name: name)) {
Text(name)
}
}
}
}
.navigationBarTitle(Text("My App"))
}
}
struct MyDetail1View: View {
var name: String
var body: some View {
//NavigationView {
List {
NavigationLink(destination: MyDetail2View(name: name)) {
Text("Hello \(name)")
}
}
.navigationBarTitle(Text("Details 1"))
//}
}
}
struct MyDetail2View: View {
var name: String
var body: some View {
HStack {
Text("\(name), I'm sorry but in Landscape there is no back button...")
}
.navigationBarTitle(Text("Details 2"))
}
}
struct ContentView : View {
var body: some View {
NavigationView {
MyMasterView()
Text("In Landscape, swipe to start...")
}
}
}
事实证明答案很简单,只需使用 isDetailLink()
!
NavigationLink(destination: MyDetail2View(name: name)) {
Text("Hello \(name)")
}.isDetailLink(false)
感谢
我正在使用 NavigationView 和 NavigationLinks 从 MasterView 移动到 Detail1View,然后进一步移动到 Detail2View。
在纵向模式的 iPhone 上,所有详细视图都显示后退按钮,允许从 Detail2View 返回 Detail1View,然后进一步返回 MasterView。
但是在 iPhone 横向模式或 iPad 上,当从 Detail1View 移动到 Detail2View 时,没有后退按钮。因此不可能返回到 Detail1View。
添加第二个 NavigationView 允许有一个后退按钮,但这并不是真正理想的解决方法,因为第二个 UINavigationViewController 显示在第一个下方。
struct MyMasterView: View {
private let names = ["Homer", "Marge", "Bart", "Lisa"]
var body: some View {
List() {
Section(header: Text("The Simpsons")) {
ForEach(names, id: \.self) { name in
NavigationLink(destination: MyDetail1View(name: name)) {
Text(name)
}
}
}
}
.navigationBarTitle(Text("My App"))
}
}
struct MyDetail1View: View {
var name: String
var body: some View {
//NavigationView {
List {
NavigationLink(destination: MyDetail2View(name: name)) {
Text("Hello \(name)")
}
}
.navigationBarTitle(Text("Details 1"))
//}
}
}
struct MyDetail2View: View {
var name: String
var body: some View {
HStack {
Text("\(name), I'm sorry but in Landscape there is no back button...")
}
.navigationBarTitle(Text("Details 2"))
}
}
struct ContentView : View {
var body: some View {
NavigationView {
MyMasterView()
Text("In Landscape, swipe to start...")
}
}
}
事实证明答案很简单,只需使用 isDetailLink()
!
NavigationLink(destination: MyDetail2View(name: name)) {
Text("Hello \(name)")
}.isDetailLink(false)
感谢