Как сделать сетку SwiftUI с переменным количеством столбцов в зависимости от доступного пространства в родительском представлении? - PullRequest
2 голосов
/ 18 октября 2019

Я разрабатываю приложение iOS-iPadOS с SwiftUI. У меня есть коллекция изображений, которые я хочу отображать в разных размерах строки (все строки должны быть одинаковой длины), заполняя большую часть родительского представления (от края до края ячейки списка). Это очень просто сделать, если вы знаете, сколько столбцов или строк вам нужно. Вместо этого я хотел бы адаптировать код устройства-независимость. Классы размера (обычные и компактные) не подходят, поскольку разделенный экран iPad и iPhone компактны, но имеют много горизонтального пространства.

Я искал способ получения размера представления, хотя я не думаю, что этохороший подход. Я ничего не нашел.

Это базовый код, который я использовал при создании макета (все еще не приспособлен для приема строк или столбцов с номером таблицы):

VStack(alignment: .center){
    HStack(alignment: .center){
        Spacer()
        ForEach(lista.prefix(5)) { periodo in
            Group{
            Image(systemName:"\(periodo.imagen).circle.fill")
            .resizable()
            .foregroundColor(color(periodo.color))
            .frame(width: 55, height: 55)
            .onTapGesture {
                self.periodoActual = self.lista.firstIndex(of: periodo) ?? 0
            }
            Spacer()
            }
        }
    }
    HStack(alignment: .center, spacing: 10){
        ForEach(lista.dropFirst(5)) { periodo in
            Image(systemName:"\(periodo.imagen).circle.fill")
            .resizable()
            .foregroundColor(color(periodo.color))
            .frame(width: 55, height: 55)
            .onTapGesture {
                self.periodoActual = self.lista.firstIndex(of: periodo) ?? 0
            }
        }
    }
}.frame(minWidth: 0, idealWidth: .infinity, maxWidth: .infinity)

Где lista - массив (его длина10) содержит экземпляры пользовательской структуры, декодированные из файла JSON. periodoActual - это переменная состояния (@State).

Кто-нибудь получил идею для эффективного решения этой проблемы? Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...