如何设置动态UICollectionViewCell间距

Eri*_*ite 5 ios autolayout uicollectionview uicollectionviewcell ios8

我在尝试在集合视图中设置细胞间距时遇到问题.iPhone 5上的一切看起来都不错,但是当我在6和6上运行它时,单元间距会急剧增加.我将最小间距设置为10,但似乎没有帮助.第一个图像是我试图在所有设备上实现的.之后的图片是我实际得到的:

iphone 5

iPhone 6

iPhone 6 plus

这是我在IB中设置的图片:

IB设置

小智 4

根据您的问题,听起来您打算设置minimumInteritemSpacing(同一行中的项目之间使用的最小间距)。

不管怎样,最小间距是您能接受的最小间距,而不是您想要的确切间距。100 的空格仍然有效,因为它大于最小值 10。

真正的问题是像元大小,您已将其固定为 150x200。如果您希望单元格调整其宽度,则需要itemSize根据视图宽度计算流布局。

  • 如果所有单元格的大小相同,您可以设置流布局的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);
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果您需要计算每个单元格的大小,您可以在委托中进行collectionView:layout:sizeForItemAtIndexPath:

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

  • 重绘布局而不使用动画:

    [self.collectionView.collectionViewLayout invalidateLayout]

  • 动画布局更改:

    [self.collectionView performBatchUpdates:nil completion:nil]