2 размера колонки вид сбоку проблема в некоторых iPhone - PullRequest
0 голосов
/ 04 декабря 2018

Я использую этот код

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        let padding: CGFloat =  50
        let collectionViewSize = collectionView.frame.size.width - padding

        return CGSize(width: collectionViewSize/2, height: collectionViewSize/2)
    }

Я могу получить представление коллекции из 2 столбцов на всех iPhone, кроме iPhone X и iphone XR, не знаю почему

enter image description here

Как заставить 2 столбца для всех айфонов?

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Вы можете установить макет вашего collectionView, создав новый макет и установив его itemSize, minimumInteritemSpacing и minimumLineSpacing, а затем назначить новый макет как collectionView.collectionViewLayout:

func setCollectionViewLayout(withPadding padding: CGFloat) {
    let layout = UICollectionViewFlowLayout()
    let size = (collectionView.frame.width - padding) / 2
    layout.itemSize = CGSize(width: size, height: size)
    layout.minimumInteritemSpacing = 0
    layout.minimumLineSpacing = 0
    collectionView.collectionViewLayout = layout
}

изатем вызовите этот метод в viewDidLayoutSubviews (это момент, когда кадры загружены, и вы можете вычислить с помощью кадра collectionView)

override func viewDidLayoutSubviews() {
    setCollectionViewLayout(withPadding: 50)
}

Примечание: Я бы порекомендовал вам:установите начальные и конечные ограничения collectionView на константу 25 вместо использования заполнения

0 голосов
/ 04 декабря 2018

Я предлагаю вам рассчитать width в соответствии с safeAreaLayoytGuide и, если вы используете UICollectionViewFlowLayout, sectionInset.Для UICollectionViewFlowLayout следующий код вычислит правильные значения width :

    let sectionInset = (collectionViewLayout as! UICollectionViewFlowLayout).sectionInset
    let width = collectionView.safeAreaLayoutGuide.layoutFrame.width
                - sectionInset.left 
                - sectionInset.right
                - collectionView.contentInset.left
                - collectionView.contentInset.right

Если вам нужны два столбца, ширина элемента будет рассчитываться следующим образом:

let space: CGFloat = 10.0
let itemSize = CGSize(width: (width - space) / 2, height: 100 /*DESIRED HEIGHT*/)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...