Поля вокруг ячейки, как в Android GridLayout

В Android легко создать список сетки со следующими полями:

введите здесь описание изображения

Я нашел это решение для iOS, но оно не добавляет поля между ячейкой и родительским представлением, а только между ячейками.

let itemSpacing: CGFloat = 3
let itemsInOneLine: CGFloat = 2
flow.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
let width = UIScreen.main.bounds.size.width - itemSpacing * CGFloat(itemsInOneLine - 1) //collectionView.frame.width is the same as  UIScreen.main.bounds.size.width here.
flow.itemSize = CGSize(width: floor(width/itemsInOneLine), height: width/itemsInOneLine)
flow.minimumInteritemSpacing = 3
flow.minimumLineSpacing = 3

введите здесь описание изображения

Как я могу это решить?

P.S. Я не хочу ничего жестко кодировать, поэтому он должен работать нормально для всех устройств iPhone/iPad.


person user924    schedule 12.04.2019    source источник
comment
Замените поток.sectionInset = UIEdgeInsets(верхний: 0, левый: 0, нижний: 0, правый: 0) на поток.sectionInset = UIEdgeInsets(верхний: 5, левый: 5, нижний: 5, правый: 5)   -  person RajeshKumar R    schedule 13.04.2019
comment
@RajeshKumarR и что? i.postimg.cc/ZRSrbPkq/Screenshot- at-Apr-13-19-33-22.png   -  person user924    schedule 13.04.2019


Ответы (2)


Добавьте начальное, конечное и верхнее ограничение с константой 5 в представление коллекции. Это решит проблему с маржой.

person Tayyab Faran    schedule 12.04.2019
comment
Спасибо. Это то, что мне нужно. Поэтому я установил 5 точек везде (для minimumInteritemSpacing, minimumLineSpacing, ведущего, конечного и верхнего ограничения представления коллекции) и я учитываю все эти поля, интервалы, чтобы получить правильную ширину let width = UIScreen.main.bounds.size.width - itemSpacing * CGFloat(itemsInOneLine - 1) - (margin * 2), как itemSpace, так и margin == 5. Теперь это выглядит отличный i.postimg.cc/VLWkS3S1/Screenshot -at-Apr-13-20-35-18.png - person user924; 13.04.2019
comment
@user924 UIEdgeInsets (сверху: 5, слева: 5, снизу: 5, справа: 5) выполняет ту же работу. Вычитание 10 при расчете ширины необходимо в обоих подходах - person RajeshKumar R; 13.04.2019

person    schedule
comment
да, на самом деле это лучше, чем константы ограничения, и мы можем установить тень вокруг ячейки - person user924; 19.04.2019
comment
поэтому лучше установить UIEdgeInsets, и мы можем даже установить flow.minimumInteritemSpacing = 0, потому что вы можете установить расстояние между ячейками в одной строке, рассчитав необходимую ширину ячейки - person user924; 19.04.2019
comment
Использование sectionInset лучше, чем добавление пространства с использованием ограничения. Если вам нужно использовать другое дополнение для раздела, которое невозможно сделать с ограничениями - person RajeshKumar R; 19.04.2019