3

Я столкнулся с этой проблемой, и я пытался выяснить, как ее исправить, но безуспешно. У меня есть табличный вид с ячейками, которые содержат изображение, которое я до сих пор не знаю, какая высота будет. Я создал выход для ограничения высоты изображенияView, и я загружаю изображение асинхронно с 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; 

И образ об ограничениях клеток: enter image description here

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

+0

Не дают ограничение высоты для ImageView. Обновите эту ячейку при загрузке изображения. Ячейка должна расти автоматически – Irfan

ответ

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

Update[weakTable beginUpdates];[weakTable endUpdates]; может привести к сбою, если назвать его более чем один раз в то время. вам нужно убедиться, что между ними нет никакого столкновения.

Вы также можете попробовать просто перезагрузить камеру.

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

Я добавил ее и не обновляю:/ –

+0

как вы меняете высоту ячейки? что делает 'heightSize'? или как вы его используете? – Ismail

+0

heightSize - свойство, которое сохраняет конечную высоту изображения –

1

После вызова setNeedsLayout вы должны позвонить по телефону layoutIfNeeded, чтобы фактически вызвать раскладку.

1

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

[tableView beginUpdates]; 
[tableView endUpdates]; 
+0

tableview ведет себя действительно странно, а затем падает. Есть идеи? –

+0

Какая ошибка? – SmokeDispenser

+0

Вне пределов: [__NSArrayM objectAtIndex:]: индекс 12 за пределами для пустого массива. Это происходит только с этим, массив выглядит хорошо, когда у меня нет этих строк. –

Смежные вопросы