SwiftUI 侧边栏列表部分默认应该折叠

the*_*bot 9 swift swiftui

我正在 SwiftUI 中制作一个带有侧边栏的应用程序,该侧边栏将显示分层信息。在本例中,我显示一个项目列表,每个项目内部都会有一些待办事项列表。

我的示例应用程序的屏幕截图

正如您在上面看到的,我的问题是,当应用程序启动时,所有部分都默认展开,我希望它们默认折叠。我使用ListwithSection(header:content:)作为侧边栏,每个部分内都有一个OutlineGroup.

这是我使用的代码

// Data source for the list
class MyEnvironmentObject: ObservableObject {
    @Published var listItems = [
        ListItem(name: "Project 1", children: [
            ListItem(name: "List 1")
        ]),
        ListItem(name: "Project 2", children: [
            ListItem(name: "List 1"),
            ListItem(name: "List 2")
        ]),
        ListItem(name: "Project 3", children: [
            ListItem(name: "Example list")
        ])
    ]
}


struct ContentView: View {

    @EnvironmentObject var dataSource: MyEnvironmentObject
    
    func listItem(for item: ListItem) -> some View {
        Text(item.name)
    }
    
    var body: some View {
        NavigationView {
            List {
                ForEach(dataSource.listItems) { item in
                    Section(header: listItem(for: item)) {
                        OutlineGroup(item.children ?? [], children: \.children) {
                            listItem(for: $0)
                        }
                    }
                }
            }
            .listStyle(SidebarListStyle())
            Text("Hello world")
        }.navigationViewStyle(DoubleColumnNavigationViewStyle())
    }


}
Run Code Online (Sandbox Code Playgroud)

我需要一个理想的解决方案,使用Listwith Section,因为我相信这大致是文件等内置应用程序用于其侧边栏的内容(打开时有默认折叠的部分)

我最初使用的是SO 中的这个解决方案,其中涉及使用DisclosureGroup,但我在手机/紧凑型显示器上遇到了格式化问题,因为列表默认情况下有分隔线,我无法禁用它们。然后我尝试使用 LazyVStack,但这意味着我无法获得合适的侧边栏样式,尤其是在 Big Sur 上。这个解决方案非常接近,但我不确定如何让这些部分自动折叠,所以非常感谢您的帮助!^-^