在SwiftUI中的SplitView中导航主视图而不是详细视图
我的iPad应用程序中有一个拆分视图:在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
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)