【发布时间】:2020-12-05 01:10:25
【问题描述】:
我有一些视图(我们将其命名为视图 A),其中包含项目列表。点击特定项目后,它会引导用户查看详细信息(视图 B)。视图 A 中的列表很长,因此我想在单击视图 B 中的后退按钮时为用户保留滚动位置和列表。现在,当单击视图 B 中的后退按钮时,视图 A 被加载为新视图。有没有一些方便的方法来实现这一点?另外,如果用户从视图 B 到其他任何地方,如何手动销毁该视图?
通过以下方式实现从 A 到 B 的导航:
NavigationLink(destination: DetailsView(), isActive: $redirectToDetails) { EmptyView() }
使用默认的快速后退按钮实现从 B 到 A 的导航。
第 1 步:用户向下滚动列表并点击某个位置,导航到详细信息视图
第 2 步:用户在详细信息视图中并单击返回按钮
第 3 步:用户导航回列表视图,列表视图执行数据加载,列表滚动到顶部。
我想以某种方式保留渲染视图(从步骤 1 开始),因此当用户返回时不会再次加载数据并且列表滚动位置与执行导航到详细信息视图时的位置完全相同。
【问题讨论】:
-
视图未“加载”或“销毁”。它们不是您在界面中看到的东西。它们只是运行的轻量级描述。如果您有需要保存的状态,请保存它,即将其构建到描述中。
-
那么我需要手动加载这个状态,对吧?
-
我认为有一些方法可以自动生成
-
不清楚你的意思,你会在演示代码中显示这个吗?
-
我不确定如何在代码中显示这一点,但我编辑了我的问题。