Установка правильной высоты UITableViewCell - PullRequest
1 голос
/ 18 ноября 2011

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

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    NSString *text = cell.detailTextLabel.text;
    CGSize size = cell.detailTextLabel.bounds.size;
    UIFont *font = cell.detailTextLabel.font;

    CGSize labelSize = [text sizeWithFont:font                           
                        constrainedToSize:size
                            lineBreakMode:UILineBreakModeWordWrap];
    return labelSize.height;
}

Однако я получаю EXC_BAD_ACCESS в следующей строке:

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

Что неправильно с приведенным выше фрагментом кода?

Ответы [ 2 ]

2 голосов
/ 18 ноября 2011

Проблема в том, что heightForRowAtIndexPath вызывается раньше cellForRowAtIndexPath. Таким образом, ячейка еще не была создана.

Если все строки имеют одинаковую высоту, вы можете указать общую высоту таблицы. В вашем viewDidLoad вы можете просто сказать self.tableView.rowHeight = ABC; Вы также можете установить это в Интерфейсном конструкторе.

2 голосов
/ 18 ноября 2011

Это

 UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

должно быть

 UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];

Но это приведет к нескольким вызовам tableView:cellForRowAtIndexPath:, лучший подход: напишите вспомогательный метод, который вычисляет высоту для каждого indexPath, вызовите его из tableView:heightForRowAtIndexPath: и tableView:cellForRowAtIndexPath:, сохраните высоту, сохраните высоту в словарь с indexpathes в качестве ключей и только вычисляет высоту, id indexPath отсутствует (или некоторые, как необходимо пересчитать). Верните высоту.

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