【发布时间】:2019-10-18 05:04:44
【问题描述】:
我在创建一个新的空白项目时发现了一个问题,列表中最多只有 10 个文本元素,否则会导致编译错误,我可以在任何地方编辑限制吗?
struct ContentView: View {
var body: some View {
List {
Text("Line 1")
Text("Line 2")
Text("Line 3")
Text("Line 4")
Text("Line 5")
Text("Line 6")
Text("Line 7")
Text("Line 8")
Text("Line 9")
Text("Line 10")
// Uncomment this line will cause Complie Error
// Text("Line 11")
}
}
}
我尝试添加一个模型
class MyModel: ObservableObject {
@Published var items: [String] = [
"line 1",
"line 2",
"line 3",
"line 4",
"line 5",
"line 6",
"line 7",
"line 8",
"line 9",
"line 10",
"line 11",
]
}
按模型数据显示列表,显示修正
@ObservedObject var model = MyModel()
var body: some View {
List {
ForEach(model.items.indices) { index in
Text(self.model.items[index])
}
}
}
那么,问题不在于 List,是 Function Builder 吗?
更新了一个新方法,使用Group,对于VStack,是可以的,但是对于List,它会显示11行,并且每一行都与“Line 11”重叠
List {
Group {
Text("Line 1")
Text("Line 2")
Text("Line 3")
Text("Line 4")
Text("Line 5")
Text("Line 6")
Text("Line 7")
Text("Line 8")
Text("Line 9")
Text("Line 10")
}
Group {
Text("Line 11")
}
}
【问题讨论】:
-
您必须将它们分成组。
-
找到了一篇关于此的文章hackingwithswift.com/quick-start/swiftui/… 说:“SwiftUI 中的所有容器必须返回不超过 10 个子项,这对于大多数用途来说通常是可以的。但是,如果您需要有超过 10 个视图, 如果你需要从你的 body 属性返回多个视图,或者如果你需要返回几种不同类型的视图,你应该使用这样的组"
-
这里有详细描述hackingwithswift.com/quick-start/swiftui/… 但是如果将VStack替换为List,文本会重叠。
标签: swiftui swiftui-list