首页 > 解决方案 > 如何让 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

解决方案


SwiftUI 从模型创建视图,例如绑定。存储选择和滚动位置,以便可以完全按原样重新创建视图。由于视图可能会更新为不同的大小,因此最好将可见项目的 ID 存储在顶部并滚动到该 ID 而不是偏移量。

旧的 UITabBarController 保持其子视图控制器活动的方式可以被认为是一个错误和内存浪费。


推荐阅读