设置单元格数据后如何更新 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 单元格的值更新后及时为它的颜色设置动画?