SwiftUI:在视图层次结构中自动来回导航
Posted
技术标签:
【中文标题】SwiftUI:在视图层次结构中自动来回导航【英文标题】:SwiftUI : Automatically navigate back and forth in the view hierarchy 【发布时间】:2020-09-05 16:46:39 【问题描述】:我正在开发一个 SwiftUI 应用程序,它在多个视图上的导航层次结构如下所示:
[地点列表] -> [一个地方的详细信息] -> [地图]
在地图上,不仅会显示之前选择的地点,还会显示[地点列表]中已知的所有地点。 用户应该能够在地图上选择另一个地点并显示其详细信息。 可以从地图中打开 [Detail of one place] 的另一个实例,但这样视图堆栈会变得越来越长。 我认为最好返回完整的导航层次结构并从 [List of Places] 中打开另一个 [Detail of one place]。
返回: [地图] -> [一个地方的详细信息] -> [地点列表] -> [一个地方的详细信息]
但是,我不确定如何最巧妙地实施这种方法。我可以使用
self.presentationMode.wrappedValue.dismiss()
并一一关闭每个视图并返回导航。然后,我会从 [地点列表] 自动切换到另一个详细信息视图。到目前为止,我还没有尝试过,但我想如果我这样做,我会为每个关闭的视图获得一个动画。 我不希望你这样做。从地图切换到细节应该像普通导航一样工作。
【问题讨论】:
【参考方案1】:在我看来,如果用户可以从 [Detail of one place] 转到 [Map] 并从 [Map] 转到 [Detail of one place ].
鉴于此,最好创建一个新视图,根据用户操作显示 [详细信息] 或 [地图] 内容,并隐藏另一个。如果我们将此新视图称为 [Combined],那么您的视图层次结构将变为:
[地点列表] -> [合并]
用户将从 [List of Places] 导航到 [Combined]。默认情况下,[Combined] 会显示一个地方的详细信息。用户会点击那里的一些按钮来查看地图。 [合并] 会隐藏一个地方的细节,并显示地图,但堆栈上不会有导航。
如果用户点击地图上的不同地点,[Combined] 将隐藏地图并显示该地点的详细信息。这样,用户可以在细节和地图之间无缝切换。
【讨论】:
我现在试了一下,效果很好。但是当视图在没有导航的情况下突然切换时,感觉有点不对劲。 这篇文章展示了如何在 SwiftUI 中弹出到根视图控制器:***.com/questions/57334455/…。看来您可以使用这种方法从 [Map] 弹出到 [List of Places],然后从那里导航到 [Detail of one place]。以上是关于SwiftUI:在视图层次结构中自动来回导航的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI 无法使用 navigationLink 来回导航
SwiftUI 在一种情况下而不是另一种情况下查看层次结构警告