在SwiftUI中的SplitView中导航主视图而不是详细视图

在SwiftUI中的SplitView中导航主视图而不是详细视图,swiftui,master-detail,splitview,ios-navigationview,Swiftui,Master Detail,Splitview,Ios Navigationview,我的iPad应用程序中有一个拆分视图: struct ContentView: View { var body: some View { NavigationView { List { NavigationLink("Show the slave view HERE", destination: SlaveView()) .navigationBarTitl

我的iPad应用程序中有一个拆分视图:

struct ContentView: View {
    var body: some View {
        NavigationView {
            List {
                NavigationLink("Show the slave view HERE", destination: SlaveView())
                    .navigationBarTitle("Master view")
            }

            Text("Detail view")
                .navigationBarTitle("DO NOT show the slave view here")
        }
    }
}
因此我喜欢在列表中打开
SlaveView
视图,而不是在细节视图中。 我已经尝试在
从属
中设置另一个
导航视图
,下面还有一个文本,并且在两个
从属
上都设置了所有
导航视图样式

这是您可以构建的最简单的从属视图:

struct SlaveView: View {
    var body: some View {
        List {
            NavigationLink("Sub Detail view", destination: Text("Sub Detail view"))
        }
        .navigationBarTitle("Slave view")
    }
}
那么,如何更改拆分视图的主视图(左视图)而不是详细视图(右视图)

注意这是一个简化的可复制代码。真正的项目使用更复杂的主列表和从列表等等。此外,我们不想使用诸如转换、标题转换、后退按钮等导航功能

为了进一步澄清,我需要流中的以下状态:


您可以尝试使用
按钮来代替
导航链接
,并替换主视图:

struct ContentView: View {
    @State var showSlaveView = false

    var body: some View {
        NavigationView {
            masterView
                .navigationBarTitle("Master view")
            Text("Detail view")
                .navigationBarTitle("DO NOT show the slave view here")
        }
    }
}

extension ContentView {
    @ViewBuilder
    var masterView: some View {
        if showSlaveView {
            SlaveView()
                .onTapGesture { self.showSlaveView = false }
        } else {
            Button("Show the slave view HERE") {
                self.showSlaveView = true
            }
        }
    }
}

您可以尝试使用
StackNavigationViewStyle()


只需修改链接,它不是一个细节


+我赞成这个想法。但它会杀死所有导航转换、标题转换、后退按钮、滑动手势等。另外,在复杂的应用程序中。主和从是复杂的列表。那怎么办?@MojtabaHosseini,但这意味着两个导航链接同时打开。从主节点打开从节点,但细节已经打开(也从主节点打开)。我认为SwiftUI导航堆栈目前不允许这样做。我需要这样的东西:在左侧保留列表,在右侧保留详细信息。但不幸的是,我也像你一样,这会毁掉整个
SplitView
,我不希望这样。我想你没有理解这个问题。+1表示指向正确的修饰语。但它有一个奇怪的错误!让我给你看一张gif:。只需单击一次即可完成此操作。看起来您可以同时激活多个链接。查看-从视觉上看,您有一些类似的内容。看起来像
.listStyle(GroupedListStyle())
就是因为这个问题。
struct ContentView: View {
    var body: some View {
        NavigationView {
            NavigationLink("Show the slave view HERE", destination: SlaveView())
                .navigationBarTitle("Master view")
            
            Text("Detail view")
                .navigationBarTitle("DO NOT show the slave view here")
        }
        .navigationViewStyle(StackNavigationViewStyle())
    }
}
NavigationLink("Show the slave view HERE", destination: SlaveView())
    .isDetailLink(false)