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

use*_*617 13 xcode swiftui

我正在完成一个需要用户数据输入字段的应用程序。我用少量数据元素对其进行建模以简化开发。今天我尝试添加其他元素,但惊讶地发现我只能向一个视图添加 10 个视图。所以我尝试了最简单的设计(如下)。如果我在视图中添加了 11 个“事物”,它会立即在顶部项目上显示错误,无论它是什么:

“传递给不带参数的调用的参数”

我是否将外部容器称为 ScrollView、VStack、List 或 Form 都没有关系。同样的行为。Text/TextField 子单元是否在 VStack 中无关紧要。

所以我回到了基础 - 刚刚添加了十个文本视图。没问题。添加第十一个,它会爆炸。这是其中一种变体 - 但我需要做的就是添加 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")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

任何指导将不胜感激。

Sor*_*ica 15

使用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")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


LuL*_*aGa 6

ViewBuilderSwiftUI 中的 s 将 0 到 10 个元素放入其初始值设定项中,除此之外,您还必须开始使用GroupVStackHStackList等对它们进行分组ForEach

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

struct FormCell: View {

    @Binding var inputString: String

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

接下来,如果您有几个,您可以使用ForEachList或将它们分组VStack