Установка динамической высоты UITableViewCell - PullRequest
2 голосов
/ 06 января 2011

У меня есть UITableView с двумя динамическими строками. Каждая из строк является подклассом UITableViewCell и загружается из кончика. Поскольку мои строки содержат динамическое содержимое, я использую layoutSubviews для изменения положения всех подпредставлений:

- (void)layoutSubviews
{
 [super layoutSubviews];

 CGFloat initialHeight = titleLabel.bounds.size.height;
 CGSize constraintSize = CGSizeMake(titleLabel.bounds.size.width, MAXFLOAT);
 CGSize size = [titleLabel.text sizeWithFont:titleLabel.font constrainedToSize:constraintSize];
 CGFloat delta = size.height - initialHeight;

 CGRect titleFrame = titleLabel.frame;
 titleFrame.size.height += delta;
 titleLabel.frame = titleFrame;

 locationLabel.frame = CGRectOffset(locationLabel.frame, 0, delta); 
 dayLabel.frame = CGRectOffset(dayLabel.frame, 0, delta);
 timeLabel.frame = CGRectOffset(timeLabel.frame, 0, delta);
}

Проблема в том, что я не могу найти способ определения высоты в табличном представлении делегата табличного представления: heightForRowAtIndexPath: метод.

Хитрость в том, что я загружаю ячейку из пера, поэтому сразу после того, как она загружена titleLabel.bounds.size.width 300 px (как в nib), без учета типа устройства (iPhone / iPad) и текущей ориентации Таким образом, кажется невозможным рассчитать высоту без условных проверок ориентации и типа устройства. Есть идеи?

1 Ответ

0 голосов
/ 06 января 2011

Ваш layoutSubviews не изменяет размер ячейки, поэтому должно работать следующее:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return cell.frame.size.height;
}

Если размер ячейки необходимо изменить из-за изменения содержимого, вы можете установить self.frame = newFrame внутри layoutSubviews.

Вы также можете вручную вызвать layoutSubviews, позвонив по номеру setNeedsLayout.

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