Предпочтительный подход для изменения содержимого UITableViewCell на основе ширины ячейки

У меня есть динамический пользовательский UITableViewCell, который использует преимущества автоматического макета.

Я изменяю текстовое содержимое метки в зависимости от ширины ячейки.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...
    cell.someLabel.text = CGRectGetWidth(cell.bounds) < 321 ? @"Concise" : @"Much longer blurb";

    return cell;
}

reloadData вызывается во время ориентационного перехода для обновления метки.

Хотя это и работает, я думаю, что есть лучший способ справиться с этим, не требующий перезагрузки tableView.

(Ни одно из ограничений не нужно менять. Метка находится в том же месте, но просто показывает другое содержимое, когда для этого есть больше места.)

  • Должен ли я создать подкласс UILabel и изменить текст в -didMoveToSuperview

  • Можно ли изменить текст в -layoutSubViews? (Не приведет ли это к другому проходу макета, потому что текст был изменен?)

Спасибо за любые ответы!

7 голосов | спросил user4151918 31 WedEurope/Moscow2014-12-31T01:49:03+03:00Europe/Moscow12bEurope/MoscowWed, 31 Dec 2014 01:49:03 +0300 2014, 01:49:03

1 ответ


0

Просто добавьте эту логику в layoutSubviews. Он вызывается каждый раз, когда механизм автоматической разметки делает свое дело.

-(void)layoutSubviews {
    self.someLabel.text = CGRectGetWidth(self.bounds) < 321 ? @"Concise" : @"Much longer blurb";
    [super layoutSubviews];
}
ответил Rick 4 Jpm1000000pmSun, 04 Jan 2015 21:05:47 +030015 2015, 21:05:47

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132