Можно ли изменить размер UITableViewCell без использования UITableViewDelegate? - PullRequest
5 голосов
/ 21 сентября 2009

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

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

Ответы [ 3 ]

5 голосов
/ 21 сентября 2009

Вы просто должны использовать табличное представление для контроля высоты. Вы можете сказать таблице, в которой ячейка была изменена, используя вызовы для удаления, а затем повторно добавить определенные ячейки, так что вам не нужно перезагружать всю таблицу - но высота должна быть получена с помощью функции обратного вызова делегата tableView: heightForRow: atIndexPath:

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

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

1 голос
/ 21 сентября 2009

Нет, вы не можете установить размер ячейки без использования UITableViewDelegate. Изменение размера ячейки с помощью фактического изменения размера ячейки, но это не изменит смещений, с которыми UITableView рисует ячейки. Что приведет к дублированию и разрывам повсюду.

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

0 голосов
/ 21 сентября 2009

Вы должны попытаться управлять фреймом владения содержимым ячеек, а не самим фреймом ячеек. вот ссылка http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UITableViewCell_Class/Reference/Reference.html#//apple_ref/occ/instp/UITableViewCell/contentView

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...