2014-11-02 112 views
5

我在尝试在集合视图中设置单元格间距时遇到问题。在iPhone 5上一切看起来不错,但是当我在6和6上运行时,单元格间距急剧增加。我将最小间距设置为10,但似乎没有帮助。第一个图像是我试图在所有设备上实现的。之后,下面的图片是什么,我真的开始:如何设置动态UICollectionViewCell间距

iPhone 5

iPhone 6

iPhone 6 plus

这里是我的设置在IB图片:基于

IB Settings

回答

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]

+0

如果我使用itemSze属性会是这样和我一样在小区设置一个固定的宽度?我在我的视图中实现了itemSize属性,但是得到了相同的结果。不知道我是否正确遵循。 – 2014-11-03 19:02:32

+0

感谢您的帮助,将在几个测试。 – 2014-11-03 20:24:32

+0

谢谢你的工作! – 2014-11-04 03:10:54