UICollectionViewCell 4.4和5.5英寸的dynamic大小

我有UICollectionView与故事板中的单元格。 每个单元格的大小设置为145×145。

它们在iPhone 4 – 5s上看起来不错,但是iPhone 6和6+的尺寸并不成比例。 而不是手动为每个设备设置不同的单元大小,我怎样才能dynamic地做到这一点?

在这里看到的例子:iPhone 5S: http : //prntscr.com/55vy7q,iPhone 6: http : //prntscr.com/55vyy2

如果您希望单元格调整其宽度,则需要根据视图宽度计算stream布局的itemSize

  • 如果所有单元格的大小相同 ,则可以设置stream布局的itemSize属性:

     #define kCellsPerRow 2 UICollectionViewFlowLayout *flowLayout = (UICollectionViewFlowLayout*)self.collectionView.collectionViewLayout; CGFloat availableWidthForCells = CGRectGetWidth(self.collectionView.frame) - flowLayout.sectionInset.left - flowLayout.sectionInset.right - flowLayout.minimumInteritemSpacing * (kCellsPerRow - 1); CGFloat cellWidth = availableWidthForCells / kCellsPerRow; flowLayout.itemSize = CGSizeMake(cellWidth, flowLayout.itemSize.height); 

    如果你想dynamic地改变每行的单元格数量,我已经在一个单独的答案中提供了这些细节 。

  • 如果您需要计算每个单元格的大小 ,可以在collectionView:layout:sizeForItemAtIndexPath: delegate中执行。

当设备方向改变时重新计算itemSize并更新布局:

  • 无animation重绘布局:

    [self.collectionView.collectionViewLayout invalidateLayout]

  • animation布局更改:

    [self.collectionView performBatchUpdates:nil completion:nil]