Ios 在不知道高度的情况下在单元格内异步下载图像

Ios 在不知道高度的情况下在单元格内异步下载图像,ios,objective-c,uitableview,autolayout,objective-c-blocks,Ios,Objective C,Uitableview,Autolayout,Objective C Blocks,我面临着这个问题,我一直在努力想办法解决它,但没有成功。 我有一个表格视图,其中的单元格包含一个图像,我仍然不知道该图像的高度。我为imageView的高度限制创建了一个出口,并且正在使用PinRemoteImage异步下载该图像(我也可以使用SDWebImage,但我认为它在iOS 9中有缺陷)。在块内部,我为高度约束指定新常量,然后进行布局更新。 单元格从不更新,我能正确查看图像的唯一方法是向下滚动然后向上滚动(当tableview重新绘制单元格时) 这是用于自动设置表格视图行高度的代码 s

我面临着这个问题,我一直在努力想办法解决它,但没有成功。 我有一个表格视图,其中的单元格包含一个图像,我仍然不知道该图像的高度。我为imageView的高度限制创建了一个出口,并且正在使用PinRemoteImage异步下载该图像(我也可以使用
SDWebImage
,但我认为它在iOS 9中有缺陷)。在块内部,我为高度约束指定新常量,然后进行布局更新。 单元格从不更新,我能正确查看图像的唯一方法是向下滚动然后向上滚动(当tableview重新绘制单元格时)

这是用于自动设置表格视图行高度的代码

self.postTableView.estimatedRowHeight = 244.0;
self.postTableView.rowHeight = UITableViewAutomaticDimension;
以及有关单元约束的图像:


你知道我做错了什么吗?谢谢

您应该在调用
setNeedsLayout
之后调用
layoutifneed
,以实际触发布局。

setNeedsLayout之后放置
layoutifneed

 [cellToUpdate setNeedsLayout];
 [cellToUpdate layoutIfNeeded];

 // and then tell the tableView to update.
 [weakTable beginUpdates];
 [weakTable endUpdates];
 // then scroll to the current indexPath
 [weakTable scrollToRowAtIndexPath:indexPath 
                 atScrollPosition:UITableViewScrollPositionNone 
                         animated:NO]; 
更新
[weakTable beginUpdates];[weakTable endUpdates]可能会崩溃。你需要确保他们之间没有冲突

您也可以尝试重新加载单元格本身

 [cellToUpdate setNeedsLayout];
 [cellToUpdate layoutIfNeeded];
 [weakTable reloadRowsAtIndexPaths:[indexPath] withRowAnimation:UITableViewRowAnimationNone];

您需要通过触发空更新告知tableview其单元格上的高度已更改,除了
setNeedsLayout
layoutifneed
之外:

[tableView beginUpdates];
[tableView endUpdates];

我添加了它,但仍然没有刷新它:/如何更改它自身的单元格高度?
heightSize
有什么作用?heightSize是一个保持最终图像高度的属性,那么如何更改单元格高度呢?或者是动态计算的?@JoanCardona那么如何改变单元格高度?或者是动态计算的?tableview的行为非常怪异,然后崩溃。有什么想法吗?超出范围:[[uuuu NSArrayM objectAtIndex:]:索引12超出空数组的范围。只有这样,当我没有这行扫描时,数组看起来很好。您是否修改您的问题,以包括使用/设置该数组的相关部分?是否调用主线程上的表视图?不要给imageview设置高度约束。下载图像时更新此单元格。细胞应该自动生长
[tableView beginUpdates];
[tableView endUpdates];