我正面临这个问题而且我一直试图弄清楚如何修复它但却没有成功。
我有一个表格视图,其中包含一个图像,我仍然不知道哪个高度。我创建了一个出口到imageView的高度约束,我用PinRemoteImage异步下载图像(我也可以使用SDWebImage
,但我认为它在iOS 9中有问题)。在块内部是我为高度约束分配新常量然后我进行布局更新。
单元格永远不会更新,我能正确看到图像的唯一方法是向下滚动然后向上(当tableview重新绘制单元格时)
__weak typeof(UITableView*) weakTable = tableView;
__weak typeof(NSIndexPath*) index = indexPath;
[cell.commentImageView pin_setImageFromURL:[[CTImageHelper sharedInstance] resizedImageURLConverterFromStringWithPrefix:comment.image.completePath andOptions:optionsString] completion:^(PINRemoteImageManagerResult *result) {
CommentTableViewCell *cellToUpdate = [weakTable cellForRowAtIndexPath:index];
cellToUpdate.heightSize = [NSNumber numberWithFloat:result.image.size.height/2];
cellToUpdate.commentImageViewHeightConstraint.constant = result.image.size.height/2;
[cellToUpdate setNeedsLayout];
}];
这是自动设置表格视图行高的代码
self.postTableView.estimatedRowHeight = 244.0;
self.postTableView.rowHeight = UITableViewAutomaticDimension;
关于我做错什么的任何想法?谢谢!
答案 0 :(得分:2)
将layoutIfNeeded
放在setNeedsLayout
[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];
答案 1 :(得分:1)
您应在致电layoutIfNeeded
后致电setNeedsLayout
以实际触发布局。
答案 2 :(得分:1)
除了setNeedsLayout
和layoutIfNeeded
之外,你需要通过触发空更新来告诉tableview它的单元格的高度发生了变化:
[tableView beginUpdates];
[tableView endUpdates];