Загрузка асинхронного изображения внутри ячейки без знания высоты

Я столкнулся с этой проблемой, и я пытался выяснить, как ее исправить, но безуспешно. У меня есть табличный вид с ячейками, которые содержат изображение, которое я до сих пор не знаю, какая высота будет. Я создал выход для ограничения высоты изображенияView, и я загружаю изображение асинхронно с PinRemoteImage (я тоже могу использовать SDWebImage но я думаю, что это ошибка в iOS 9). Внутри блоков я назначаю новую константу для ограничения высоты, а затем выполняю обновление макета. Ячейка никогда не обновляется, единственный способ, которым я могу правильно видеть изображение, – прокрутка вниз, а затем вверх (когда просмотр таблицы перерисовывает ячейку)

 __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; 

И изображение об ограничениях ячейки: введите описание изображения здесь

Любые идеи о том, что я делаю неправильно? Благодаря!

Поместить 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]; 

Вы должны вызвать layoutIfNeeded после вызова setNeedsLayout для фактического запуска макета.

Вам нужно сообщить табличному представлению, что высота изменилась на его ячейки, вызвав пустое обновление, кроме setNeedsLayout и layoutIfNeeded :

 [tableView beginUpdates]; [tableView endUpdates]; 
  • Высота автовыброса изменяется, когда я нажимаю новый контроллер вида
  • Содержимое ContentView UITableViewCell получает нежелательное ограничение «height == 44»
  • Autolayout, похоже, не работает при изменении размеров просмотра
  • Неверная высота UITableViewCell с UITableViewAutomaticDimension
  • Почему systemLayoutSizeFittingSize возвращает (0, 0) для UITableViewCell?
  • Самонастраивающиеся ячейки с асинхронной загрузкой изображений
  • Как сделать динамическую динамику UITableView с функцией автозапуска?
  • Динамическая высота uitablviewcell неверна из systemLayoutSizeFittingSize
  • Ограничения для указания, когда размер представления зависит от нескольких подзонов
  • Невозможно использовать ограничения автозапуска в представлении таблицы
  • UITableCell с автоматической компоновкой настроил многострочный UILabel, усеченный
  • Давайте будем гением компьютера.