我正在完成一个需要用户数据输入字段的应用程序。我使用少量数据元素对其进行了建模,以简化开发过程。今天,我尝试添加其他元素,但惊讶地发现我只能向一个视图添加10个视图。因此,我尝试了最简单的设计(如下)。如果我在视图中添加了11个“事物”,它将立即在顶部显示错误,无论它是什么:
“传递给调用的参数不带参数”
我将外部容器称为ScrollView,VStack,List还是Form都没有关系。行为相同。 Text / TextField子单元是否在VStack中都没有关系。
所以我回到了基础-刚刚添加了十个Text视图。没问题。添加一个十一,它炸毁。这是变体之一-但我要做的就是添加10个简单的Text视图以使其中断。
我一定在这里缺少一些基本的东西。我检查了Xcode的较新版本,但是我拥有最新的版本11.2 beta 2(11B44)。
@State private var textField1: String = "Pass to the ListCell"
@State private var textField2: String = "2"
//more of these
var body: some View {
NavigationView {
VStack {
//extract the VStack and create a separate struct
ListCell(tfString: textField1)
VStack {
Text("Text Field")
TextField("Placeholder", text: $textField2)
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding()
}
VStack {
Text("Text Field")
TextField("Placeholder", text: $textField3)
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding()
}
//more of the above VStacks
Text("6")
Text("7")
Text("8")
Text("9")
Text("10")
//Spacer()
//Text("11")
}
}
}
任何指导将不胜感激。
答案 0 :(得分:2)
使用Group {...}
https://developer.apple.com/documentation/swiftui/group
var body: some View {
NavigationView {
VStack {
//extract the VStack and create a separate struct
ListCell(tfString: textField1)
Group {
VStack {
Text("Text Field")
TextField("Placeholder", text: $textField2)
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding()
}
VStack {
Text("Text Field")
TextField("Placeholder", text: $textField3)
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding()
}
}
//more of the above VStacks
Group {
Text("6")
Text("7")
Text("8")
Text("9")
Text("10")
}
//Spacer()
//Text("11")
}
}
}
答案 1 :(得分:1)
ViewBuilder
会将0到10个元素添加到其初始值设定项中,而您必须使用Group
,VStack
,HStack
, List
,ForEach
等。
最好的方法是开始提取属于单独视图的一些元素,例如:
struct FormCell: View {
@Binding var inputString: String
var body: some View {
VStack {
Text("Text Field")
TextField("Placeholder", text: $inputString)
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding()
}
}
}
接下来,如果有几个,则可以使用ForEach
和List
或VStack
将它们分组。
答案 2 :(得分:0)
按照人们的建议使用Group
。
但是,您可以扩展ViewBuilder
以使构建器具有10个以上的视图。我创建了一篇文章,向您介绍了More than 10 views in SwiftUI extending ViewBuilder。