我正在 SwiftUI 中制作一个带有侧边栏的应用程序,该侧边栏将显示分层信息。在本例中,我显示一个项目列表,每个项目内部都会有一些待办事项列表。
正如您在上面看到的,我的问题是,当应用程序启动时,所有部分都默认展开,我希望它们默认折叠。我使用List
withSection(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)
我需要一个理想的解决方案,使用List
with Section
,因为我相信这大致是文件等内置应用程序用于其侧边栏的内容(打开时有默认折叠的部分)
我最初使用的是SO 中的这个解决方案,其中涉及使用DisclosureGroup
,但我在手机/紧凑型显示器上遇到了格式化问题,因为列表默认情况下有分隔线,我无法禁用它们。然后我尝试使用 LazyVStack,但这意味着我无法获得合适的侧边栏样式,尤其是在 Big Sur 上。这个解决方案非常接近,但我不确定如何让这些部分自动折叠,所以非常感谢您的帮助!^-^
归档时间: |
|
查看次数: |
3384 次 |
最近记录: |