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

Как сделать так, чтобы предметы казались больше, но при этом оставались 3 элемента поперек?

На вопрос дан ответ, спасибо! Тем, у кого есть такая же проблема, обязательно используйте этот метод: collectionView (_: layout: sizeForItemAt :) .

let availableWidth = collectionView.bounds.inset(by: collectionView.layoutMargins).width
let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
layout.itemSize = CGSize(width: availableWidth/3, height: availableWidth/3)

layout.minimumInteritemSpacing = 10
layout.minimumLineSpacing = 30

collectionView!.collectionViewLayout = layout

Example of grid

0
Eliza 5 Июл 2021 в 15:33

3 ответа

Лучший ответ
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    let cellInRow = 3
    let flowLayout = collectionViewLayout as! UICollectionViewFlowLayout
    let totalSpace = flowLayout.sectionInset.left + flowLayout.sectionInset.right + (flowLayout.minimumInteritemSpacing * CGFloat(cellInRow - 1))
    let mySize = collectionView.bounds.width - totalSpace
    let size = mySize / CGFloat(cellInRow)

    return CGSize(width: size, height: size)
}
1
Fabio 5 Июл 2021 в 13:05

Вам необходимо учесть дополнительный межэлементный интервал при вычислении availableWidth, как в следующем примере.

let numberOfColumns: CGFloat = 3
let minimumSpacing: CGFloat = 10

let spacing = ((numberOfColumns - 1) * minimumSpacing)
let availableWidth = collectionView.bounds.inset(by: collectionView.layoutMargins).width - spacing

let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
layout.itemSize = CGSize(width: availableWidth/numberOfColumns, height: availableWidth/numberOfColumns)

layout.minimumInteritemSpacing = minimumSpacing
layout.minimumLineSpacing = 30

collectionView!.collectionViewLayout = layout
2
Tarun Tyagi 5 Июл 2021 в 12:49

Удалите значение межстрочного интервала из высоты и ширины ячейки

 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        
        let collectionViewWidth = collectionView.frame.size.width - 90
        let collectionViewHeight = collectionView.frame.size.hight
        return CGSize(width: collectionViewWidth/3, height: collectionViewHeight/3 + ((collectionViewHeight/3)))
    }
1
Ketan Sodvadiya 8 Июл 2021 в 07:11