gpt4 book ai didi

ios - 下载图像时调整 UITableViewCell 高度

转载 作者:IT王子 更新时间:2023-10-29 08:06:21 24 4
gpt4 key购买 nike

我正在使用 UIImageView+AFNetworking 类别进行异步图像加载。一切正常,但我已经尝试了几件事,但在根据下载的图像调整单元格高度时没有成功。我希望图像适合单元格的宽度但调整高度,但我不知道如何实现。我已经尝试重新加载下载图像的行,但这只会导致 cellForRowAtIndexPath 再次触发并再次设置所有内容,等等。几乎是递归。

我正在计算新的图像大小差异并将其存储在 NSMutableArray 中,然后在 UIImageView 的 setImageWithURLRequest:placeholderImage:success: 中重新加载成功 block 中的行。

我在 heightForRowAtIndexPath 中获得了几行的正确高度,但随后,表格开始表现得很奇怪,所有内容都在叠加,等等。

有什么想法吗?

谢谢!

编辑

我最终使用了 Ezeki 的答案。我还写了一篇关于该主题的文章,并制作了一个使用此技术的示例应用程序。

查看here .

最佳答案

您需要将下载的图像存储在内存或磁盘上,因此下次您尝试从该 URL 获取图像时,您将从缓存中接收图像。

所以如果你这样做,你将不得不做这样的事情:

[tableView beginUpdates];

[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];

[tableView endUpdates];

并且您应该在 TableView 数据源的这种方法中返回新单元格的高度:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

我建议您使用 SDWebImage library而不是 AFNetworking,因为它可以为您将图像缓存到内存缓存和磁盘中,而且非常易于使用。因此,如果您决定使用它,您的下载图片代码将如下所示:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

...

[cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]
success:^(UIImage *image, BOOL cached) {

// save height of an image to some cache
[self.heightsCache setObject:[NSNumber numberWithFloat:imHeight]
forKey:urlKey];

[tableView beginUpdates];
[tableView reloadRowsAtIndexPaths:@[indexPath]
withRowAnimation:UITableViewRowAnimationFade];
[tableView endUpdates];
}
failure:^(NSError *error) {... failure code here ...}];

}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
// try to get image height from your own heights cache
// if its is not there return default one
CGFloat height = [[self.heightsCache objectForKey:urlKeyFromModelsArrayForThisCell] floatValue];
...
return newHeight;
}

关于ios - 下载图像时调整 UITableViewCell 高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13105006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com