Я не могу заставить мой LazyVGrid отображать более двух строк

Итак, у меня есть очень простая сетка. Это 5 столбцов и должно быть 3 строки. Но я не могу заставить компилятор скомпилировать что-либо, кроме двух строк....

Компилятор жалуется: "Дополнительные аргументы в позициях #11, #12, #13, #14, #15 в вызове"

Если я удалю текст с 6 по 10, он компилируется....

Код:

struct ContentView: View {
    var columns = [
        GridItem(spacing: 8, alignment: .leading),
        GridItem(spacing: 8, alignment: .center),
        GridItem(spacing: 8, alignment: .center),
        GridItem(spacing: 8, alignment: .center),
        GridItem(spacing: 8, alignment: .center)
    ]

    var body: some View {
        LazyVGrid(columns: columns, spacing: 8) {
            Text("Buttons").font(.headline)
            Text("resting").font(.subheadline)
            Text("active").font(.subheadline)
            Text("loading").font(.subheadline)
            Text("disabled").font(.subheadline)

            Text("1").font(.headline)
            Text("2").font(.subheadline)
            Text("3").font(.subheadline)
            Text("4").font(.subheadline)
            Text("5").font(.subheadline)

            Text("6").font(.headline)
            Text("7").font(.subheadline)
            Text("8").font(.subheadline)
            Text("9").font(.subheadline)
            Text("10").font(.subheadline)
        }.padding(.horizontal, 10)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

1 ответ

Решение

Вы попали в ViewBuilder Предел 10 просмотров... так что, если вы используете статический контент, вам нужно обернуть его в Group/s, чтобы соответствовать этому правилу (т. е. не более 10 просмотров в блоке сборки)

Так что вроде

var body: some View {
    LazyVGrid(columns: columns, spacing: 8) {
      Group {
        Text("Buttons").font(.headline)
        Text("resting").font(.subheadline)
        Text("active").font(.subheadline)
        Text("loading").font(.subheadline)
        Text("disabled").font(.subheadline)
      }

      Group {
        Text("1").font(.headline)
        Text("2").font(.subheadline)
        Text("3").font(.subheadline)
        Text("4").font(.subheadline)
        Text("5").font(.subheadline)

        Text("6").font(.headline)
        Text("7").font(.subheadline)
        Text("8").font(.subheadline)
        Text("9").font(.subheadline)
        Text("10").font(.subheadline)
      }

      Group {
         ... other code
      }
    }.padding(.horizontal, 10)
}

Примечание: Group тоже вид, так что групп тоже должно быть не более 10... но группы могут содержать и другие группы...

Но... конечно предпочтительнее работать с динамическим контентом, например ForEach, на всякий случай.

Другие вопросы по тегам