Пользовательские подпредставления UITableViewCell с использованием автоматического макета - без xibs, все в коде

Пользовательские подпредставления UITableViewCell, добавленные в код с использованием автоматического макета, работают (проверено). Однако весь смысл этого заключался в том, чтобы не вычислять высоту каждой ячейки таблицы, а метод делегата heightForRowAtIndexPath ожидает высоту при рисовании таблицы.

Как я могу определить эту высоту на основе содержимого с помощью автоматического макета (добавление на основе языка визуального формата в уже добавленном и работающем коде) и вернуть его в этот heightForRowAtIndexPath?

Кроме того, я не могу сделать это в фоновом потоке (или могу?), И поэтому, если у меня есть UITableView, использующий это, поддерживаемый списком, скажем, 1000 записей, это займет вечность, верно?


person Rickster    schedule 15.02.2013    source источник


Ответы (1)


Автомакет в этом случае просто означает, что вам не нужно вычислять размеры кадров ваших подпредставлений в каждой ячейке. Это не имеет ничего общего с методом heightForRowAtIndexPath — он используется табличным представлением для определения рамки ячейки, которая затем будет информировать о макете подвидов.

Использование Autolayout для определения высоты, вероятно, будет довольно медленным, и вы не сможете сделать это в фоновом потоке. Если у вас есть 1000 строк, я бы рассмотрел иерархическую структуру вместо одной таблицы, так как прокручивать ее будет довольно утомительно. Вы также можете рассмотреть возможность расчета высоты в момент установки или создания данных.

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

person jrturton    schedule 15.02.2013