动画 UICollectionViewCell:同时滚动和调整大小

Animating a UICollectionViewCell: Scroll To And Resize At The Same Time

我试图让 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];
}

大部分时间都不起作用。

谢谢!

-埃里克

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