swiftui - 如何让 SwiftUI SidebarMenu 每次都显示相同的 DetailView 而不是创建一个新的(在 macOS 上)
问题描述
我有一个 macOS Master/Detail 应用程序,它使用 NavigationView 和左侧面板中的侧边栏菜单和右侧面板中的一系列详细信息视图。
当用户选择不同的侧边栏菜单选项时,我想保留详细视图,这样如果用户通过选择先前的选择菜单选项切换回来,那么应用程序应该显示最初创建的详细视图以及任何用户更改或选择。
Currently it seems that SwiftUI creates a new view from scratch when a menu option is selected rather than just displaying the previously created one. 例如,如果详细视图有一个 ListView 并且用户之前选择了一个项目,那么这个选择会像之前的任何滚动位置一样丢失。
无论如何可以使用 SwiftUI 来实现这一点。
解决方案
SwiftUI 从模型创建视图,例如绑定。存储选择和滚动位置,以便可以完全按原样重新创建视图。由于视图可能会更新为不同的大小,因此最好将可见项目的 ID 存储在顶部并滚动到该 ID 而不是偏移量。
旧的 UITabBarController 保持其子视图控制器活动的方式可以被认为是一个错误和内存浪费。
推荐阅读
- elasticsearch - Elastic-Search count 两个字段时间差的聚合
- cloud-foundry - Cloudfoundry 共享服务实例和用户提供的服务差异
- xamarin - 在 Xamarin UWP 中的 Package.appxmanifest 中更改版本
- angular - 如何使表单中的所有字段都需要
- spring - 如何将图像添加到百里香叶
- java - 分配池“xyz”不存在
- python-3.x - 检查文本是否包含字符串并保留原始文本中匹配的单词:
- python - 如何在知道 cURL 命令中的特定 id 的情况下从 json 中获取值
- javascript - 为什么我会在一个文件中获得 [object HTMLParagraphElement] 而它在另一个文件中工作
- javascript - 从html表中选择一行并使用没有jquery的javascript选择多行