Прежде всего, соберите три переменные в зависимости от ваших потребностей.Это минимальный интервал (как InteritemSpacing, так и межстрочный интервал - должен быть одинаковым по UXwise, но вы можете изменить его в методах делегатов, если хотите. Промежуточный интервал всегда должен быть равен minimumSpacing
), edgeInsetPadding и количество элементов, которое вы хотитев ряд.
private var numberOfItemsInRow = 2
private var minimumSpacing = 5
private var edgeInsetPadding = 10
В своем коде вы уже определили свои Edge Insets как:
UIEdgeInsets(
top: 5, left: 5, bottom: 5, right: 5
)
Левые и правые вставки важны для правильного определения размера элемента,left + right дает нам большую сумму 10. Это должно быть присвоено edgeInsetPadding
следующим образом:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
let inset = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)
edgeInsetPadding = inset.left+inset.right
return inset
}
Теперь давайте перейдем к вашему UICollectionViewDelegateFlowLayout
.Обновите следующие методы.
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return minimumSpacing
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return minimumSpacing
}
Теперь перейдем к основной части.Измените ваш sizeForItemAt
в UICollectionViewDelegateFlowLayout
как:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let width = (Int(UIScreen.main.bounds.size.width) - (numberOfItemsInRow - 1) * minimumSpacing - edgeInsetPadding) / numberOfItemsInRow
return CGSize(width: width, height: width)
}
И это все.Теперь вы получаете две плитки одинакового размера в сетке 2x2.Если вы хотите изменить это в будущем, просто измените переменную numberOfItemsInRow
на что-то другое.Как 3 для 3x3.