如何在横向 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)

感谢