2017-02-16 2 views
1

У меня этот пользовательский UICollectionViewCell, и он отлично работает на iphone 7, но когда я запускаю его на симуляторе Iphone 5, все выглядит странно. В моем представлении коллекции есть много разделов и по одному элементу в разделе. Он выглядит как вид таблицы, означающий, что каждая ячейка имеет полную ширину, и все они расположены выше друг друга, как в виде таблицы. По какой-то причине в Iphone 5 рамка: (-27,5, 50,0, 320,0, 45,7143) означает, что она находится в правильной ширине и высоте, но она начинается с 27,5 точек слева от экрана. Я обновляю ячейку следующим образом:CollectionViewCell вне экрана на iphone 5

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> ProfileCollectionCell { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! ProfileCollectionCell 
    let width = CGFloat((self.collectionView?.frame.width)!) 
    let height = width/7 
    cell.frame.size = CGSize(width: width, height: height) 
    return cell 
} 

Как я могу правильно установить раму?

ответ

3

Вы не должны устанавливать рамку ячейки в cellForItemAtIndexPath

Вместо реализации метода UICollectionViewDelegateFlowLayout ...

func collectionView(UICollectionView, layout: UICollectionViewLayout, sizeForItemAt: IndexPath) { 
    let width = collectionView?.frame.width ?? 0 
    let height = width/7 
    return CGSize(width: width, height: height) 
} 
+0

Это сработало так хорошо. Благодаря!! – Sharonica

1

первого протокола добавить в свой класс UICollectionViewDelegateFlowLayout и добавить код ниже:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 
{ 
    let width = CGFloat((self.collectionView?.frame.width)!) 
    let height = width/7 
    return CGSize(width: width, height: height) 
} 
+0

Спасибо! это работает – Sharonica