如何设置UICollectionViewCell动态间距

5
我在设置集合视图的单元格间距时遇到了问题。在 iPhone 5 上看起来很好,但在 iPhone 6 和 6 Plus 上运行时,单元格间距显著增加。我将最小间距设置为10,但似乎没有帮助。第一张图片是我想在所有设备上实现的效果。后面的图片是我实际得到的结果: iPhone 5 iPhone 6 iPhone 6 plus 这是我的 IB 设置截图: IB Settings
1个回答

4
根据您的问题,看起来您想设置minimumInteritemSpacing(同一行中项目之间要使用的最小间距)。
无论如何,最小间距是您接受的最小间距,而不是您想要的确切间距。100的空格仍然有效,因为它大于10的最小值。
真正的问题是单元格大小,您已将其固定为150x200。如果您希望单元格调整其宽度,则需要根据视图宽度计算流式布局的itemSize
  • If all your cells will be the same size, you can set the flow layout's itemSize property:

    #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);
    
  • If you need to calculate per-cell sizes, you can do it in the collectionView:layout:sizeForItemAtIndexPath: delegate.

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

  • 不使用动画重绘布局:

    [self.collectionView.collectionViewLayout invalidateLayout]

  • 使用动画更改布局:

    [self.collectionView performBatchUpdates:nil completion:nil]


如果我使用itemSize属性,那是否相当于在单元格上设置固定宽度?我在viewDidLoad中实现了itemSize属性,但结果相同。不确定我是否遵循正确的方法。 - GOAT
感谢您的帮助,我会在几分钟内测试它。 - GOAT
我有同样的问题,但是它没有起作用。我在viewdidload中添加了它。 - fozoglu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接