如何删除UICollectionViewCells之间的空间?

时间:2015-12-15 06:04:37

标签: ios objective-c uicollectionview uicollectionviewlayout

我试图删除UICollectionView之间的空格,这是设备的屏幕截图

enter image description here

我真的想避免那些空格(蓝色),我试过以下代码

这是我的collectionview委托

#pragma mark <UICollectionViewDataSource>

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
    return 1;
}


- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return 30;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
    cell.backgroundColor = [UIColor redColor];
    return cell;
}

首先我尝试了这个,但它不起作用

- (void)viewDidLoad {
    [super viewDidLoad];
    UICollectionViewFlowLayout *flow = [[UICollectionViewFlowLayout alloc] init];
    flow.itemSize = CGSizeMake(cell.frame.size.width, cell.frame.size.height);
    flow.scrollDirection = UICollectionViewScrollPositionCenteredVertically;
    flow.minimumInteritemSpacing = 0;
    flow.minimumLineSpacing = 0;
    [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"Cell"];

}

我也尝试了这个,它不起作用

#pragma mark collection view cell paddings
- (UIEdgeInsets)collectionView:(UICollectionView*)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
    return UIEdgeInsetsMake(0, 0, 0, 0); // top, left, bottom, right
}

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

    return 5.0;
}

请帮我解决这个问题。

4 个答案:

答案 0 :(得分:2)

因此,属性和方法可以限制最小空间,例如minimumInteritemSpacingForSectionAtIndex

然而,它只是最小的空间&#39;并不总是最大的空间。

我正在使用的东西:借用Cell spacing in UICollectionView

覆盖标准流程布局:

- (NSArray *) layoutAttributesForElementsInRect:(CGRect)rect {
    NSArray *answer = [super layoutAttributesForElementsInRect:rect];

    for(int i = 1; i < [answer count]; ++i) {
        UICollectionViewLayoutAttributes *currentLayoutAttributes = answer[i];
        UICollectionViewLayoutAttributes *prevLayoutAttributes = answer[i - 1];
        NSInteger maximumSpacing = 4;
        NSInteger origin = CGRectGetMaxX(prevLayoutAttributes.frame);

        if(origin + maximumSpacing + currentLayoutAttributes.frame.size.width < self.collectionViewContentSize.width) {
            CGRect frame = currentLayoutAttributes.frame;
            frame.origin.x = origin + maximumSpacing;
            currentLayoutAttributes.frame = frame;
        }
    }
    return answer;
}

maximumSpacing可以设置为您喜欢的任何值

答案 1 :(得分:1)

flow.sectionInset = UIEdgeInsetsMake(1, 1, 1, 1);

sectionInset中的UICollectionViewFlowLayout使用viewdidload

答案 2 :(得分:1)

从故事板也可以设置间距属性。选择您的集合视图 - 选择尺寸检查器选项卡,您可以调整最小间距 表示表示行。

您也可以调整部分插图

enter image description here

答案 3 :(得分:0)

有关如何调整UICollectionView宽度(使用AutoLayout约束)以完全适合所有单元格而没有任何间距,请参阅my answer