单击单元格时,我想更改CollectionViewCell的大小。如果单元格已经打开,则需要扩展或折叠。到目前为止,我正在使用didSelectItemAtIndexPath方法中的以下代码进行此操作:

UICollectionViewCell *myCell = [collectionView cellForItemAtIndexPath:indexPath];

[UIView transitionWithView:collectionView duration:.3 options:UIViewAnimationOptionCurveLinear
     animations:^{
        CGRect oldFrame = myCell.frame;
        if ([expandedCell isEqual:myCell]) {
            expandedCell = nil;
            oldFrame.size.height = 42;
        }else{
            expandedCell = myCell;
            oldFrame.size.height = 220;
        }
            myCell.frame = oldFrame;

   } completion:^(BOOL finished) {}];


当我扩展最后一个单元格时,它可以正常工作。它也崩溃了。但是,例如,当我单击索引为0的单元格时,单元格0的帧将在单元格1的帧下方。如何更改选定索引路径后所有单元格的帧?别忘了,我在更改所有单元格时都需要动画。

编辑:我发现我的问题的答案与接下来的几行代码。关键是您需要在动画中调用重新加载数据,以便在sizeForItemAtIndexPath中更改大小会被动画化。

[self.collectionView performBatchUpdates:^{
    [self.collectionView reloadData];
} completion:^(BOOL finished) {}];

最佳答案

您需要在集合视图高度委托中调整高度,并在didSelectItem中重新加载该特定单元格

10-08 05:56