UICollectionViewCell 在滚动时用动画移除空间

Posted

技术标签:

【中文标题】UICollectionViewCell 在滚动时用动画移除空间【英文标题】:UICollectionViewCell remove space with animation while scrolling 【发布时间】:2016-06-09 06:51:07 【问题描述】:

我对 UICollectionViewCell 设计布局有疑问。我需要在 UICollectionView 单元之间滚动时使用动画删除空间,我尝试了一些 UICollectionView 的委托方法,例如 -

CollectionView - minimumLineSpacingForSectionAtIndex CollectionView - minimumInteritemSpacingForSectionAtIndex UIEdgeInsetsMake(0,0,0,0); scrollViewDidEndDragging

但达不到标准。这是代码:

  - (CGSize)collectionView:(UICollectionView *)collectionView
              layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
  
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    CGFloat screenWidth = screenRect.size.width;
    float cellWidth = screenWidth / 2.1; //Replace the divisor with the column count requirement. Make sure to have it in float.
    CGSize size = CGSizeMake(cellWidth, cellWidth);

    return size;
 

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

 - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section 
 
   return 1.0;
 

 // Layout: Set Edges
 - (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section 
 
   return UIEdgeInsetsMake(0,0,0,0);  // top, left, bottom, right
 

 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
 
   UIEdgeInsetsMake(0,0,0,0); // after scroll cell space not remove. 
 

【问题讨论】:

放一些你正在使用的代码。 【参考方案1】:

我不完全理解您要做什么,但是如果您想更改集合视图的布局属性并为更改设置动画,最好的方法是调用setLayout:animated:

所以像这样 -

UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout alloc] init];
layout.minimumLineSpacing = 1.0;
layout.minimumInteritemSpacing = 1.0;
layout.itemSize = CGSizeMake(cellWidth, cellHeight);

UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:frame collectionViewLayout:layout]

然后每当你想改变它,只需调用setLayout:animated: 方法:

UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout alloc] init];
initialLayout.minimumLineSpacing = 5.0;
initialLayout.minimumInteritemSpacing = 7.0;
layout.itemSize = CGSizeMake(newCellWidth, newCellHeight);

[collectionView setLayout:layout animated:YES];  

【讨论】:

以上是关于UICollectionViewCell 在滚动时用动画移除空间的主要内容,如果未能解决你的问题,请参考以下文章

向下滚动时多次选择 UICollectionViewCell?

UICollectionViewCell 滚动时缩放单元格大小

如何修复滚动时从 UICollectionViewCell 中消失的图像

滚动时大型 UICollectionViewCell 停止显示

在 UICollectionViewCell 中滚动时 MPMoviePlayerController 变为空白

滚动 UICollectionView 时保留 UICollectionViewCell