无法添加超过10个项目来查看SwiftUI

时间:2019-10-20 05:20:46

标签: xcode swiftui

我正在完成一个需要用户数据输入字段的应用程序。我使用少量数据元素对其进行了建模,以简化开发过程。今天,我尝试添加其他元素,但惊讶地发现我只能向一个视图添加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")
        }
    }
}

任何指导将不胜感激。

3 个答案:

答案 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)

SwiftUI中的

ViewBuilder会将0到10个元素添加到其初始值设定项中,而您必须使用GroupVStackHStackListForEach等。

最好的方法是开始提取属于单独视图的一些元素,例如:

struct FormCell: View {

    @Binding var inputString: String

    var body: some View {
        VStack {
            Text("Text Field")
            TextField("Placeholder", text: $inputString)
                .textFieldStyle(RoundedBorderTextFieldStyle())
                .padding()
        }
    }
}

接下来,如果有几个,则可以使用ForEachListVStack将它们分组。

答案 2 :(得分:0)

按照人们的建议使用Group

但是,您可以扩展ViewBuilder以使构建器具有10个以上的视图。我创建了一篇文章,向您介绍了More than 10 views in SwiftUI extending ViewBuilder

enter image description here