如何设置动态UICollectionViewCell间距

时间:2014-11-02 22:24:56

标签: ios ios8 uicollectionview autolayout uicollectionviewcell

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

iPhone 5

iPhone 6

iPhone 6 plus

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

IB Settings

1 个答案:

答案 0 :(得分:3)

根据您的问题,听起来您的意思是设置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);
    
  • 如果您需要计算每个单元格的尺寸,您可以在collectionView:layout:sizeForItemAtIndexPath:代表中执行此操作。

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

  • 重绘不带动画的布局:

    [self.collectionView.collectionViewLayout invalidateLayout]

  • 动画布局更改:

    [self.collectionView performBatchUpdates:nil completion:nil]