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

时间:2015-02-09 07:41:27

标签: ios objective-c xcode uicollectionview uicollectionviewlayout

我试图让我的单元格之间的间距= 0

期望结果的示例:

enter image description here

我现在拥有的东西(iPhone 6):

enter image description here

我的代码:

- (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的看法:

enter image description here

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

2 个答案:

答案 0 :(得分:3)

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

您应该设置UICollectionViewCells动态的宽度,并根据UICollectionView的大小计算它们。

所以,例如。如果你想要一行3个单元格,将UICollectionView的宽度除以3,你应该有单元格的宽度。这需要对这些值进行一些实验。

答案 1 :(得分:0)

如果未设置,请更新您的cellize和imageview大小。你必须设置你的imageview的约束适合单元格。

替换

layout.itemSize = CGSizeMake(118, 118);

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

我设置了screenize,因为我认为你的collectionview适合屏幕宽度。将其替换为您的集合视图大小。

因为您试图显示3个单元格,但您为项目设置了固定宽度。所以只需更新您的单元格大小。因为在不同的屏幕中,您的集合视图将会发生变化,因此您也应该更新单元格大小。