Рассчитать высоту ячейки на основе количества строк? - PullRequest
3 голосов
/ 05 октября 2010

Я хотел бы сделать пользовательскую высоту 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
}

Ответы [ 2 ]

4 голосов
/ 05 октября 2010

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

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

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

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

0 голосов
/ 05 октября 2010

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

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

...