Пользовательский размер UICollectionViewCell в Swift 4.2 - PullRequest
0 голосов
/ 17 ноября 2018

Я работаю над приложением кроссворда, но что-то упускаю, когда вычисляю каждый размер элемента UICollectionView. Я получаю правильный размер для iPhone SE, но неправильный размер для iPhone XR. Что я делаю не так?

func setLayout() -> UICollectionViewFlowLayout {
    let layout = UICollectionViewFlowLayout()
    layout.itemSize = getCellSize()
    layout.minimumInteritemSpacing = 0
    layout.minimumLineSpacing = 0
    layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
    return layout
}

func getCellSize() -> CGSize {
    let width:CGFloat = self.view.frame.width/CGFloat(crossWordData[0].count)
    let height:CGFloat = (self.view.frame.height -  TitleView.frame.height)/CGFloat(crossWordData.count) - cellsBorderWidth
    //cellsBorderWidth = 1.2
    let cellSize = CGSize(width:width , height:height)
    return cellSize
}

iPhone SE - looking good

iPhone XR - bottom cells are cut

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

В конце концов, я изменил свой код -

let width:CGFloat = self.view.frame.width/CGFloat(crossWordData[0].count)
let height:CGFloat = self.view.frame.height*0.85/CGFloat(crossWordData.count)

Высота просмотра коллекций в макете экрана составляет 85%

0 голосов
/ 17 ноября 2018

Это потому, что self.view заканчивается в нижней части экрана.У новых айфонов (X, Xs, Xs Max, Xr) внизу есть это место для «домашнего жеста».Таким образом, для ваших вычислений содержимое вашего CollectionView больше, чем CollectionView, потому что у вашего CollectionView есть нижнее ограничение, равное нижнему ограничению безопасной области, которое для новых iPhone выше, чем нижняя часть экрана.Поэтому, когда вам нужны ширина и высота вместо этого

let width:CGFloat = self.view.frame.width/CGFloat(crossWordData[0].count)
let height:CGFloat = (self.view.frame.height -  TitleView.frame.height)/CGFloat(crossWordData.count) - cellsBorderWidth

, называйте это

let width:CGFloat = self.yourCollectionView.frame.width/CGFloat(crossWordData[0].count)
let height:CGFloat = self.yourCollectionView.frame.height/CGFloat(crossWordData.count) - cellsBorderWidth
...