为 UICollectionViewCell 设置动画:同时滚动到并调整大小

Posted

技术标签:

【中文标题】为 UICollectionViewCell 设置动画:同时滚动到并调整大小【英文标题】:Animating a UICollectionViewCell: Scroll To And Resize At The Same Time 【发布时间】:2015-05-11 22:36:08 【问题描述】:

我正在尝试让 UICollectionViewCell 进行动画调整大小,同时让集合视图将单元格滚动到集合视图视口的顶部。

当我这样做时

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath

    [self.collectionView scrollToItemAtIndexPath:indexPath atScrollPosition:UICollectionViewScrollPositionTop animated:YES];
    [collectionView performBatchUpdates:nil completion:nil];

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

    UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:indexPath];

    if (cell.isSelected) 
        return self.collectionView.frame.size;
    
    else 
        return CGSizeMake(300, 100);
    

滚动发生在调整大小动画之前。

如果我在 performBatchUpdates 中调用 scrollToItemAtIndexPath,比如

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath

    [collectionView performBatchUpdates:^
        [self.collectionView scrollToItemAtIndexPath:indexPath atScrollPosition:UICollectionViewScrollPositionTop animated:YES];
     completion:nil];

它大部分时间都不起作用。

谢谢!

-埃里克

【问题讨论】:

【参考方案1】:

实现这种效果的最佳方法是简单地继承 UICollectionViewFlowLayout 并根据所选单元格调整单元格布局属性。

【讨论】:

以上是关于为 UICollectionViewCell 设置动画:同时滚动到并调整大小的主要内容,如果未能解决你的问题,请参考以下文章

为 UICollectionViewCell 设置动画:同时滚动到并调整大小

为 UICollectionView 中的所有 UICollectionViewCell 设置动画

以编程方式将 UICollectionViewCell 宽度设置为 UICollectionView 宽度

如何正确设置 UICollectionViewCell 边距?

UICollectionViewCell 填充

以编程方式将UICollectionViewCell宽度设置为UICollectionView宽度