【问题标题】:How to set collection view cell without gap between two cell in single row如何在单行中的两个单元格之间设置没有间隙的集合视图单元格
【发布时间】:2016-06-14 07:30:07
【问题描述】:

我使用情节提要放置了一个带有一个自定义单元格的集合视图。我总共有 6 个图像,所以每行我有 2 个图像(2 个单元格)。现在当我运行 2 个单元格之间的间隙时更多。我需要删除所有所有单元格之间的间隙,所以它应该看起来像没有间隙,有 6 张图像。现在下面的图像是我需要删除间隙

我尝试使用故事板增加单元格的宽度。但我不工作。有没有什么办法可以消除所有行中每个单元格之间的间隙(所有单元格之间的右、上、下间隙)

请帮帮我。谢谢

但是当我在 iphone 6 上运行时,我会变成这样,为什么?

【问题讨论】:

  • 打开你的故事板->选择你的收藏视图->点击尺寸检查器->将项目之间的最小空间调整为0,将行之间的最小空间调整为0
  • 我必须选择我的收藏视图单元格或整个收藏视图
  • 您需要在布局中设置项目大小,使单元格宽度等于屏幕宽度的一半
  • 我做了,但只有顶部和底部的单元格没有间隙地显示出来。单元格的左侧和右侧怎么样??
  • 假设您使用的是UICollectionViewFlowLayout,那么它有一个您可以设置的itemSize 属性。您需要在代码中而不是在情节提要中设置它,因为它需要基于屏幕宽度的不同值。

标签: ios objective-c uicollectionview


【解决方案1】:

你可以在UICollectionViewFlowLayout中设置minimumInteritemSpacing,这里在documentation可以看到更多细节

这样,

UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
flowLayout.minimumInterItemSpacing = 1;

self.collectionView.layout = flowLayout;

来源:http://nsscreencast.com/episodes/46-fun-with-uicollectionview

【讨论】:

  • 这只是设置最小间距,不是最大间距。它不会阻止细胞之间的间隙。
【解决方案2】:

让你的类符合 UICollectionViewDelegateFlowLayout 协议并实现方法:

- (CGSize)collectionView:(UICollectionView *)collectionView
              layout:(UICollectionViewLayout *)collectionViewLayout
  sizeForItemAtIndexPath:(NSIndexPath *)indexPath {

    CGFloat width = self.collectionView.frame.size.width/2;
    return CGSizeMake(width, width);
}


-(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {

   return UIEdgeInsetsZero;
}

-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section {

   return 0.0;
}

-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section {
   return 0.0;
}

【讨论】:

  • 请查看我的更新帖子。在 iphone 6 中运行时,所有单元格都有这么大的差距,但是对于 iphone 5s,它的工作没有间隙
  • 您会在 iPhone 6 上看到更大的差距,因为屏幕比 iPhone 5s 大,而且您的单元格大小可能是固定的。您可以通过覆盖方法 collectionView:layout:sizeForItemAtIndexPath: (如上所述)动态更改单元格大小
  • @ scollaco 我只需要添加这个方法 1- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { CGFloat width = self.collectionView .frame.size.width/2;返回 CGSizeMake(宽度, 宽度); }` 够了吗?
  • 它将根据collectionView的大小改变你的单元格的大小。其他方法会将布局配置为不允许单元格之间存在间隙。