gpt4 book ai didi

SwiftUI List() 在 macOS 上不显示 .children

转载 作者:行者123 更新时间:2023-12-04 03:35:38 24 4
gpt4 key购买 nike

更新

我正在尝试在 SwiftUI 中使用分层 List View (List( tree, children:))。我发现如果第一个列表元素没有子元素,则只显示层次结构的顶层。对我来说,这看起来像是 SwiftUI 中的一个错误。我想知道是否有人知道一个好的解决方案。

[这是我的问题的一个更好的版本,使用相同的 struct 类型和相同的数组元素]

@main
struct bug_reportApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}


struct FileItem: Hashable, Identifiable, CustomStringConvertible {
var id: Self { self }
var name: String
var children: [FileItem]? = nil
var description: String {
return name
}
}


let tree0: [FileItem] = [
FileItem(name: "users", children:
[FileItem(name: "user1234", children:
[FileItem(name: "Photos", children:
[FileItem(name: "photo001.jpg"),
FileItem(name: "photo002.jpg")]),
FileItem(name: "Movies", children:
[FileItem(name: "movie001.mp4")]),
FileItem(name: "Documents")
]),
FileItem(name: "newuser", children:
[FileItem(name: "Documents", children: [])
])
]),
FileItem(name: "private", children: nil)
]

let tree1 = [tree0[1], tree0[0]]
let tree2 = [FileItem(name: "private", children: []), tree0[0]]


struct ContentView: View {



var body: some View {
HStack{
VStack{
Text("Works").font(.headline)
List(tree0, children: \.children) { item in
Text(item.description)
}
}

VStack{
Text("First element has empty .children").font(.headline)
List(tree2, children: \.children) { item in
Text(item.description)
}
}

VStack{
Text("First element has nil .children").font(.headline)
List(tree1, children: \.children) { item in
Text(item.description)
}
}

}
}
}

这是一张带注释的屏幕截图,突出显示了缺少的树扩展箭头所在的位置/应该所在的位置。 screenshot

原始问题

我正在尝试在 SwiftUI 中使用分层 List View (List( tree, children:))。

我不明白为什么我这里的简单示例只显示 3 个顶级 3 项,没有小箭头来展开列表元素 #2 下的子列表。

我可以剪切并粘贴看起来非常相似的示例(到同一个项目、同一个文件中),它们确实有效……但我看不出其中的区别!

我的代码不起作用:


import SwiftUI

struct TreeIndexNode: Hashable, Identifiable, CustomStringConvertible {
var id: Int
var children: [TreeIndexNode]? = nil
var description: String {
return String("\(id)")
}
}

struct ContentView: View {

let tree: [TreeIndexNode] = [ TreeIndexNode(id: 1), TreeIndexNode(id: 2, children: [
TreeIndexNode(id: 3),
TreeIndexNode(id: 4),
]),
TreeIndexNode(id: 8),
]

var body: some View {
List( tree, children: \.children) { row in
Text(row.description)
}
}
}

但如果我将它从 Apple Developer 页面切换到这个示例,它会按预期工作:


struct ContentView: View {
struct FileItem: Hashable, Identifiable, CustomStringConvertible {
var id: Self { self }
var name: String
var children: [FileItem]? = nil
var description: String {
switch children {
case nil:
return "📄 \(name)"
case .some(let children):
return children.isEmpty ? "📂 \(name)" : "📁 \(name)"
}
}
}
let fileHierarchyData: [FileItem] = [
FileItem(name: "users", children:
[FileItem(name: "user1234", children:
[FileItem(name: "Photos", children:
[FileItem(name: "photo001.jpg"),
FileItem(name: "photo002.jpg")]),
FileItem(name: "Movies", children:
[FileItem(name: "movie001.mp4")]),
FileItem(name: "Documents", children: [])
]),
FileItem(name: "newuser", children:
[FileItem(name: "Documents", children: [])
])
]),
FileItem(name: "private", children: nil)
]
var body: some View {
List(fileHierarchyData, children: \.children) { item in
Text(item.description)
}
}
}

我从 Xcode 12.4“多平台”项目模板开始。这是它在 MacOS 上的样子:

Screen shot of non-working MacOS build of my code above

当我为 iOS 构建时,它确实按预期工作:

my code above in iOS simulator

最佳答案

您的代码在 MacOS 上按预期工作。所有三个列表都显示了正确的可扩展子项。

enter image description here

您可以尝试重新启动/更新 XCode。一件特别的事情是,箭头出现在上面屏幕截图的右侧,而它们出现在帖子的左侧。是否有某些语言/区域设置/格式设置已添加到您的项目中但未包含在上面的代码段中?

顺便说一句,所写的代码交换了子元素 nil 和空子元素的标签。澄清一下,tree1 是一个有 nil 子节点的树,而 tree2 有空子节点。上面的屏幕截图运行了 OP 的原始未修改代码。

关于SwiftUI List() 在 macOS 上不显示 .children,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66988800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com