【问题标题】:How to set dynamic UICollectionViewCell Spacing如何设置动态 UICollectionViewCell 间距
【发布时间】:2014-12-29 13:45:03
【问题描述】:

我在尝试在我的收藏视图中设置单元格间距时遇到问题。 iPhone 5 上的一切看起来都不错,但是当我在 6 和 6 上运行它时,单元格间距会急剧增加。我将最小间距设置为 10,但这似乎无济于事。第一个图像是我试图在所有设备上实现的。下面的图片是我实际得到的:

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

【问题讨论】:

    标签: ios ios8 uicollectionview autolayout uicollectionviewcell


    【解决方案1】:

    根据您的问题,听起来您打算设置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]

    【讨论】:

    • 如果我使用 itemSze 属性,这与我在单元格上设置固定宽度一样吗?我在我的视图中实现了 itemSize 属性确实加载但得到了相同的结果。不知道我是否正确地跟随。
    • 感谢您的帮助,稍后会进行测试。
    • 我有同样的问题,但我没有工作。我在 viewdidload 中添加了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    相关资源
    最近更新 更多