UICollectionViewCell Spacing 设置为 0 但仍然有间距

UICollectionViewCell Spacing is set to 0 but still have spacing

我正在尝试使我的单元格之间的间距 = 0

期望结果示例:

我目前拥有的(iPhone 6):

我的代码:

- (UICollectionViewFlowLayout *)setCollectionViewFlowLayout
{
    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];

    //iphone5 100
    //iphone6 118
    layout.itemSize             = CGSizeMake(118, 118);
    layout.footerReferenceSize  = CGSizeMake(0, 0);

    layout.sectionInset            = UIEdgeInsetsMake(0, 0, 0, 0);
    layout.minimumInteritemSpacing = 0.0;
    layout.minimumLineSpacing      = 0.0;

    return layout;
}

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{
    return UIEdgeInsetsMake(0, 0, 0, 0);
}

我在 IB 上有什么:

我错过了什么?提前致谢!

如果您没有设置,请更新您的单元格大小和图像视图大小。您必须将图像视图的约束设置为适合单元格。

替换

layout.itemSize = CGSizeMake(118, 118);

layout.itemSize = CGSizeMake([UIScreen mainScreen].bounds.size.width /3, [UIScreen mainScreen].bounds.size.width /3);

我设置屏幕尺寸是因为我假设您的 collectionview 适合屏幕宽度。将其替换为您的 collectionview 大小。

因为您试图显示 3 个单元格,但您为项目设置了固定宽度。所以只需更新您的单元格大小。因为在不同的屏幕上你的 collectionview 宽度会改变所以你也应该更新你的单元格大小。

它说的是项目之间的最小间距不是固定间距。 UICollectionViewFlowLayout 总是尝试在一行中设置尽可能多的项目。

您应该使 UICollectionViewCells 的宽度动态变化,并根据 UICollectionView 的大小进行计算。

因此,例如。如果您想要一行 3 个单元格,请将 UICollectionView 的宽度除以 3,您应该得到单元格的宽度。不过,这需要对这些值进行一些试验。

今天遇到这个问题,单元格之间插入了几个像素,可能是小数精度丢失导致的,比如340除以7,取不到整数。 多次加上将导致 one-pixel 差异。