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 停止显示