Fra*_*kZp 2 ios swiftui vstack
我正在尝试构建一个包含多个 VStack(元素)的 VStack(容器),每个 VStack 都有一个标题和一个文本。元素 VStack 应均匀分布,并在其间有间隔。
由于某种原因,它最多只能工作 4 个元素 VStack,如果我增加,则会出现错误
Failed to build ContentView.swift
Ambiguous reference to member 'buildingBlock()'
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
import SwiftUI
struct ContentView: View {
var body: some View {
VStack {
Spacer()
VStack {
Text("Title 1")
Text("Text 1")
}
Spacer()
VStack {
Text("Title 2")
Text("Text 2")
}
Spacer()
VStack {
Text("Title 3")
Text("Text 3")
}
Spacer()
VStack {
Text("Title 4")
Text("Text 4")
}
Spacer()
VStack {
Text("Title 5")
Text("Text 5")
}
Spacer()
VStack {
Text("Title 6")
Text("Text 6")
}
Spacer()
VStack {
Text("Title 7")
Text("Text 7")
}
Spacer()
VStack {
Text("Title 8")
Text("Text 8")
}
Spacer()
VStack {
Text("Title 9")
Text("Text 9")
}
Spacer()
VStack {
Text("Title 10")
Text("Text 10")
}
Spacer()'
}
.background(Color.red)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Run Code Online (Sandbox Code Playgroud)
由于 SwiftUI 的实现方式,一个视图最多只能有 10 个直接、显式的子视图。您的顶层VStack有 21 个直接子视图:10 个子视图VStack和 11 个Spacer它们周围的 11 个子视图。
有多种解决方法。如果您确实需要一个硬编码的子视图列表,您可以使用Group使一些子视图成为间接的:
struct ContentView: View {
var body: some View {
VStack {
Group {
Spacer()
VStack {
Text("Title 1")
Text("Text 1")
}
Spacer()
VStack {
Text("Title 2")
Text("Text 2")
}
Spacer()
VStack {
Text("Title 3")
Text("Text 3")
}
}
Group {
Spacer()
VStack {
Text("Title 4")
Text("Text 4")
}
Spacer()
VStack {
Text("Title 5")
Text("Text 5")
}
Spacer()
VStack {
Text("Title 6")
Text("Text 6")
}
}
Group {
Spacer()
VStack {
Text("Title 7")
Text("Text 7")
}
Spacer()
VStack {
Text("Title 8")
Text("Text 8")
}
Spacer()
VStack {
Text("Title 9")
Text("Text 9")
}
}
Spacer()
VStack {
Text("Title 10")
Text("Text 10")
}
Spacer()
}
.background(Color.red)
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,顶层VStack有 6 个直接子级: 3 Group、 2Spacer和 1 VStack。每个Group还有 6 个直系子代: 3VStack和 3 Spacer。没有视图有超过 10 个直接子视图。
这里更好的方法是使用ForEach来生成子项:
struct ContentView: View {
var body: some View {
VStack {
Spacer()
ForEach(1 ... 10, id: \.self) { i in
Group {
VStack {
Text("Title \(i)")
Text("Text \(i)")
}
Spacer()
}
}
}
.background(Color.red)
}
}
Run Code Online (Sandbox Code Playgroud)
现在顶层VStack只有两个直接子视图:第一个Spacer和ForEach. 根据需要多次复制ForEach其子视图 (the )。Group
在这种情况下,我们使用Group来允许 Swift 推断主体的类型ForEach,因为ForEach主体将包含两个语句(theVStack和 the Spacer),这将阻止 Swift 推断其类型。
| 归档时间: |
|
| 查看次数: |
4586 次 |
| 最近记录: |