Есть ли лучший способ определить правильный размер для UITableViewCell? - PullRequest
9 голосов
/ 07 ноября 2008

У меня есть ячейка UITableView, размер которой будет изменяться в зависимости от ее содержимого (возможно, нескольких строк текста).

Так как кажется, что heightForRowAtIndexPath вызывается до Я размечаю ячейку, просто угадываю правильную высоту, вызывая [NSString sizeWithFont] в моей текстовой строке. Есть ли лучший способ установить высоту после Я выложил текст в ячейку и у меня есть представление о том, какого именно размера он должен быть?

Ответы [ 3 ]

8 голосов
/ 07 ноября 2008

Звучит глупо, но ... э-э ... "расположите вашу ячейку перед выходом heightForRowAtIndexPath";)

Серьезно, хотя - ОС когда-либо вызывает это, только если это необходимо (например, собирается создать ячейку и отобразить ее на экране), поэтому ее размещение и подготовка к отображению - не напрасная трата усилий. .

Обратите внимание, вы не должны делать макет отдельно, логически. Просто вызовите ваш [self prepLayoutForCellAtIndex: index] в вашей подпрограмме heightForRowAtIndexPath.

Если данные статические, вы можете создать таблицу высот и кэшировать информацию.

if (0 == heightTable[index]) {
    heightTable[index] = [self prepLayoutForCellAtIndex:index];
}
return (heightTable[index]);

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

4 голосов
/ 07 ноября 2008

Я обычно использую следующее:

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath: (NSIndexPath *) indexPath {
UITableViewCell *cell = [self tableView: tableView cellForRowAtIndexPath: indexPath];
return cell.bounds.size.height;

}

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

0 голосов
/ 07 ноября 2008

Если вы посмотрите на SMS.app в качестве примера, Apple сохраняет высоту строки ячейки в базе данных sqlite SMS.app.

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