UICollectionView:minimumInteritem间隔更改单元格选择

时间:2015-06-29 09:47:07

标签: ios uicollectionview uicollectionviewcell uicollectionviewlayout

在我的集合视图中,我想缩放所选的集合视图单元格。与此同时,我还希望在选择之前和选择之后在单元格之间保持相同的interItemSpacing,包括放大的单元格。但是,如果我只是通过设置cell.transform属性缩放单元格来重建相邻单元格。其他单元格应该自行调整以保持空间。我该如何解决这个问题?

即,

  cell -50pix- cell -50pix- cell

  cell -50pix- scaled cell -50pix- cell

2 个答案:

答案 0 :(得分:1)

通过应用变换,您只需缩放视图的大小。要调整大小并允许调整UICollectionView的其余部分,您需要返回sizeForItemAtIndexPath中的新大小:

选择项目后,您应该使用以下命令在该indexPath上重新加载该项目:

 [collectionView reloadItemAtIndexPath:selectedIndexPath]

将selectedIndexPath替换为存储所选indexPath的变量的名称。

您不希望invalidateLayout,因为您只是更改了一个项目的外观。

答案 1 :(得分:1)

我不知道这是否是最佳解决方案,

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

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

        if ([indexPath isEqual:selectedIndexPath]) {
            return CGSizeMake(175, 175);  // return enlarged size if selected cell
        }
        return CGSizeMake(150, 150);
    }
    -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
        selectedIndexPath = indexPath;   // set selected indexPath
        [collectionView performBatchUpdates:^{
                [collectionView.collectionViewLayout invalidateLayout];
            } completion:^(BOOL finished) {
                }];
    }

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

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