我从一个干净的项目开始,在 VStack 中添加了 5 个按钮和 5 个垫片,一切都很好。当我在底部添加第 6 个间隔符时,代码突然无法编译,并出现错误:“对成员‘buildBlock()’的引用不明确”。
是什么导致了这个错误?这是与 SwiftUI 相关的错误吗?或者它是一个功能?这不是我第一次注意到 VStack 或 HStack 的条目数量受到限制,是否有一些相关文档?
不完全是鼓舞人心,我应该切换回 UIKit 吗?
SwiftUI 使用ViewBuilder
构造构成许多 SwiftUI 视图的视图,例如VStack
, HStack
, List
等等。如果你看一下视图生成器文档,你会看到buildBlock
函数有许多副本,每个副本都有不同数量的视图作为参数。视图数量最多的函数仅接收 10 个视图,这就是您看到所观察到的限制的原因。解决这个问题的一种方法是使用Group
s:
VStack {
Group {
Text("Placeholder 0")
Text("Placeholder 1")
Text("Placeholder 2")
Text("Placeholder 3")
Text("Placeholder 4")
Text("Placeholder 5")
Text("Placeholder 6")
Text("Placeholder 7")
Text("Placeholder 8")
Text("Placeholder 9")
}
Group {
Text("Other Placeholder 10")
Text("Other Placeholder 11")
Text("Other Placeholder 12")
Text("Other Placeholder 13")
Text("Other Placeholder 14")
Text("Other Placeholder 15")
Text("Other Placeholder 16")
Text("Other Placeholder 17")
Text("Other Placeholder 18")
Text("Other Placeholder 19")
}
}
尽管如果您想要 20 个彼此非常相似的视图,我们还是鼓励您使用类似ForEach
以免让你的观点过于臃肿。仅当 >10 个视图确实唯一时才应使用上述解决方法。即便如此,一种更 SwiftUI-y 的方法是将这些视图分割成更小的视图:
VStack {
SingleDigitPlaceholders()
TeensPlaceholders()
}
struct SingleDigitPlaceholders: View {
var body: some View {
ForEach(0..<10) { i in
Text("Placeholder \(i)")
}
}
}
struct TeensPlaceholders: View {
var body: some View {
ForEach(10..<20) { i in
Text("Other Placeholder \(i)")
}
}
}
当然,在这个具体的例子中,你可以只拥有两个ForEach
最初的观点是这样的,但在更复杂的情况下,这一点仍然成立。例如,在包含许多元素的表单中(例如在工作申请表中:名字、姓氏、地址、电话号码文本字段、教育下拉菜单、日期字段等),您仍然可以将一个视图拆分为更小的组件(在工作申请示例中 - 个人信息视图、教育信息视图等)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)