设置单元格数据后如何更新 UICollectionView 中单元格的大小?

Posted

技术标签:

【中文标题】设置单元格数据后如何更新 UICollectionView 中单元格的大小?【英文标题】:How to update size of cells in UICollectionView after cell data is set? 【发布时间】:2014-03-09 17:57:26 【问题描述】:

所以我有一个 UICollectionView,每个单元格中都有不同大小的不同图像。当 cellForItemAtIndexPath: 被调用时,我使用一种方法更新 UICollectionViewCell,该方法在网络上异步获取图像并显示它的全尺寸。

我的问题是我的单元格的大小已经用 sizeForItemAtIndexPath 设置了。我希望它被召回,以便单元格具有下载的图像大小。

我该怎么做?

【问题讨论】:

你能添加你的代码“在网络上异步获取图像并显示它的全尺寸” 【参考方案1】:

如果您已经设置了大小,请找到您要刷新的单元格的索引:

NSIndexPath * indexPathOfCellToResize = // index path of cell to refresh
[myCollectionView reloadItemsAtIndexPaths:@[indexPathOfCellToResize]];

可能有更好的方法来做到这一点,但这里有一些可行的方法:

在您的单元格中创建代理协议

@protocol CellDelegate

- (void) imageIsReadyForCell:(id)cell;

@end

委托属性

@property (strong, nonatomic) id<CellDelegate>delegate;

在单元格中,当图像完成调用时:

[self.delegate imageIsReadyForCell:self];

然后在你的文件中托管collectionView的界面

@interface SomeViewController : UIViewController <CellDelegate>

在.m中

- (void) imageIsReadyForCell:(id)cell 
    NSIndexPath * indexOfReadyCell = [yourCollectionView indexPathForCell:cell];
    [myCollectionView reloadItemsAtIndexPaths:@[indexPathOfReadyCell]];

【讨论】:

这会调用 sizeForItemAtIndexPath 吗?如果是这样,我如何访问更新后的单元格以便获取 imageView 大小? 是的,它应该能回忆起一切。我正在使用我使用过的方法进行更新。 太棒了。但是我仍然需要为 sizeForItemAtIndexPath 提供单元格图像的大小。有没有一种干净的方法? 假设你的图片已经有合适的尺寸,它们带有一个 size 属性,img.size 这是一种方式,或者在 sizeForItem: YourCustomCell * cell = [myCollectionView cellForItemAtIndexPath:indexPath]; return cell.yourCustomCellImageProperty.size;

以上是关于设置单元格数据后如何更新 UICollectionView 中单元格的大小?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 QTableview 单元格的值更新后及时为它的颜色设置动画?

UICollection 单元格快速混合

理解 UICollection Flow Layout 流式布局

重新排列表格视图单元格后如何更新核心数据记录

更新表格视图单元格中的核心数据值后如何刷新

如何在不重新加载标题的情况下重新加载 UICollectionView 中的单元格?