Невозможно добавить более 10 элементов для просмотра SwiftUI - PullRequest
0 голосов
/ 20 октября 2019

Я заканчиваю приложение, которому нужны поля ввода данных пользователя. Я смоделировал это с небольшим количеством элементов данных, чтобы упростить разработку. Сегодня я попытался добавить дополнительные элементы и был поражен, обнаружив, что я могу добавить только 10 видов к виду. Поэтому я попробовал простейшие конструкции (ниже). Если я добавил 11 «вещей» к представлению, он сразу же отобразил ошибку в верхнем элементе, какой бы она ни была:

«Аргумент передан в вызов без аргументов»

Не имеет значенияназываю ли я внешний контейнер ScrollView, VStack, List или Form. Такое же поведениеНеважно, находятся ли подсистемы Text / TextField в VStack или нет.

Так что я вернулся к основам - просто добавил десять представлений текста. Нет проблем. Добавьте одиннадцатое, и оно взорвется. Вот один из вариантов - но все, что мне нужно сделать, это добавить 10 простых текстовых представлений, чтобы разбить его.

Мне, должно быть, здесь не хватает чего-то действительно базового. Я проверил более новую версию XCode, но у меня установлена ​​бета-версия 2 версии 11.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")
        }
    }
}

Будем благодарны за любые рекомендации.

Ответы [ 2 ]

1 голос
/ 20 октября 2019

ViewBuilder s в SwiftUI берет от 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.

1 голос
/ 20 октября 2019

Использование 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")
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...