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

Вот на дисплее меньше, чем у iPhone 6: введите описание изображения здесь

И вот как это выглядит на дисплее, большем или равном iPhone 6: введите описание изображения здесь

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

1
Adrien Zier 26 Ноя 2016 в 22:26

2 ответа

Лучший ответ

Вам нужно рассчитать ширину ячейки. Попробуйте этот код.

class YourClass: UIViewController {
        //MARK:-Outlets
        @IBOutlet weak var yourCollectionView: UICollectionView!

        //Mark:-Variables
        var cellWidth:CGFloat = 0
        var cellHeight:CGFloat = 0
        var spacing:CGFloat = 12
        var numberOfColumn:CGFloat = 2


        //MARK:-LifeCycle
        override func viewDidLayoutSubviews() {
            super.viewDidLayoutSubviews()

            yourCollectionView.contentInset = UIEdgeInsets(top: spacing, left: spacing, bottom: spacing, right: spacing)

            if let flowLayout = yourCollectionView.collectionViewLayout as? UICollectionViewFlowLayout{
                cellWidth = (yourCollectionView.frame.width  - (numberOfColumn + 1)*spacing)/numberOfColumn
               cellHeight = cellWidth //yourCellHeight = cellWidth if u want square cell
                flowLayout.minimumLineSpacing = spacing
                flowLayout.minimumInteritemSpacing = spacing
            }
        }

     extension YourClass:UICollectionViewDelegateFlowLayout{
            func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
                return CGSize(width: cellWidth, height: cellHeight)
            }
    }
2
Samip Shah 28 Ноя 2016 в 04:50

Вам необходимо рассчитать свои размеры в зависимости от размера телефона - если ширина двух ячеек больше, чем размер экрана (включая все смещения между ними), они будут расположены как на первом рисунке.

У вас есть два варианта: один - работать с размерами и масштабировать ячейки в соответствии с размером устройства. Два - оставить как есть - внести небольшие изменения для iphone6 / 6s / 7.

Если вы откажетесь от первого, вам нужно будет установить ограничение для этих размеров - соотношение сторон или центр по горизонтали (что может немного обрезать изображение).

Для динамического изменения размеров обратите внимание на: https://developer.apple.com/reference/uikit/uicollectionviewdelegateflowlayout

Более конкретно: https://developer.apple.com/reference/uikit/uicollectionviewdelegateflowlayout/1617708- просмотр коллекции

2
Miknash 26 Ноя 2016 в 19:41