Рассчитать высоту ячейки на основе количества строк?

Я хотел бы создать собственную высоту UITableViewCell, используя (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath.

Я пытаюсь получить высоту UITableViewCell, умножая количество строк в textLabel на высоту каждой строки, а затем добавляя 10.0f для субтитров. Я использую следующий код и получаю exc_bad_access(). Почему?

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    return ([[[tableView cellForRowAtIndexPath:indexPath] textLabel] numberOfLines] * [[[[tableView cellForRowAtIndexPath:indexPath] textLabel] font] lineHeight]) + 10.0;
    //return kRowHeightiPod; //A constant value for a sanity check
}

person Moshe    schedule 04.10.2010    source источник
comment
взгляните на этот вопрос. если вы посмотрите на вторую часть ответа, я думаю, вы найдете решение stackoverflow.com/questions/129502/   -  person Aaron Saunders    schedule 05.10.2010
comment
@Aaron - Я считаю, что должно быть проще. Мне не нужно было переопределять прямоугольник для моей ячейки. Я смогу просто рассчитать высоту на основе количества строк. Я пытаюсь получить значения с плавающей запятой для моей высоты строки и количества значений строки.   -  person Moshe    schedule 05.10.2010
comment
Я думаю, что в конце концов это решение окажется самым простым, у вас еще нет прямоугольника.   -  person Aaron Saunders    schedule 05.10.2010


Ответы (2)


Прежде чем вы сможете получить ячейку, вам нужно вычислить ее высоту. Вы только что вычислили высоту, зависящую от ячейки. Вы создали бесконечную рекурсию.

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

Также обратите внимание, что numberOfLines представляет количество строк, которые текстовая метка может отображать, но может отображаться меньше, если содержимого недостаточно. Другими словами, даже если отображается только одна строка текста, numberOfLines вернет две, если это максимальное количество строк, которое текстовая метка способна отобразить.

Вероятно, вы захотите использовать один из NSString Дополнения UIKit для вычисления высоты текста, который вы хотите отобразить в ячейке.

person Kris Markel    schedule 04.10.2010

Вы указываете количество строк на этикетке? Потому что это даст вам ответ по умолчанию, а не количество строк, соответствующих тексту, который вы используете ...

Я бы сказал, что наиболее вероятная причина сбоя связана с textLabel. Попробуйте установить для NSZombieEnabled значение YES в переменных среды для исполняемого файла, и журнал сообщит вам, какой объект вызывается после его выпуска ...

person Kendall Helmstetter Gelner    schedule 05.10.2010