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 视图?

SwiftUI 在一种情况下而不是另一种情况下查看层次结构警告

SwiftUI:@Environment 未在视图层次结构中接收提供的值

SwiftUI 视图层次结构中较高的动画覆盖嵌套动画

如何将不在根层次结构中的 SwiftUI 视图呈现为 UIImage?