2016-11-23 4 views
0

У меня есть UITableViewCell с несколькими фрагментами данных, организованными в вертикальную структуру стека. Некоторые из них динамически вертикальны, один - UILabel, а один - UIImageView.Динамические высоты изображения в UITableViewCell с AutoLayout

UIImageView - это то, с чем я столкнулся. Я установил ограничение высоты с выходом в моем UITableViewCell. Изображения загружают async, поэтому высота строки UITableViewCell будет неправильной, и мы знаем только истинную высоту строки после загрузки изображения. Когда я устанавливаю ограничение для обновления в соответствующее соотношение сторон после загрузки изображения, мой UITableView становится полностью ненадежным с изображениями, прыгающими повсюду, и форматирование не очень хорошо работает.

Я столкнулся с другой статьей в StackOverflow, в которой упоминалось, что вы должны предварительно изучить изображения, получить их ширину и высоту, чтобы мы могли определить это и установить ограничения перед загрузкой изображения. Это обеспечивает плавную прокрутку.

Мой вопрос: это единственный способ? Существуют ли лучшие методы использования AutoLayout с динамическими размерами изображений? Что они будут?

Я пробовал звонить setNeedsLayout, setNeedsUpdateConstraints, updateConstraintsIfNeeded и т. Д. Ни один из них, похоже, не работает.

Любые советы?

Джеймс

ответ

2

Если вам нужно, чтобы предсказать ваши высоты ячеек в зависимости от размера изображения, то да, вы должны предварительно изучить изображения, если вы хотите, чтобы настройки гладкой компоновки с динамической анимацией и приемлемой производительностью прокрутки.

Например, Pinterest возвращает размер изображения для запрашиваемого Pin в ответе API, потому что он хочет, чтобы вы настроили макет, прежде чем изображение будет асинхронным, на самом деле они делают то же самое в своем собственном приложении iOS (вы можете изучить их API here). Пример ответа API Pinterest с расширенной информации об изображении:

root:{} 1 item 
data:{} 5 items 
note:A hardened leather thimble to make stitching leather easier! 
url:https://www.pinterest.com/pin/310959549256036760/ 
image:{} 1 item 
    original:{} 3 items 
    url:https://s-media-cache-ak0.pinimg.com/originals/b2/19/ec/b219ec9b8418233c651de9d17bd00e4a.jpg 
    width:640 
    height:640 

Второй вариант, использовать «псевдо динамической высоты». Главное мышление: высота клеток всегда предсказуема и предварительно рассчитана, но изображение внутри ячейки имеет динамический размер. Лучшее объяснение для такого решения, которое я недавно прошивал здесь - Self-sizing Table View Cells.

+1

Спасибо за ввод! Я искал размер изображения раньше, чем в iOS и Android. Кажется, что он хорошо работает в плане гладкой прокрутки. –

+0

@JamesScott, добро пожаловать! – dive

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

  • Нет связанных вопросов^_^