Я хочу изучить общий и правильный способ расчета высоты для пользовательских ячеек.
Мои ячейки загружены из пера, они имеют две многострочные метки UILabel один над другим.
На данный момент я создаю специальную ячейку конфигурации в viewDidLoad и использую ее в heightForRowAtIndexPath.
-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
[self configureCell:self.configurationCell forIndexPath:indexPath];
CGRect configFrame = self.configurationCell.frame;
configFrame.size.width = self.view.frame.size.width;
self.configurationCell.frame = configFrame;
[self.configurationCell layoutSubviews];
UILabel *label = (UILabel *)[self.configurationCell viewWithTag:2];
float height = label.frame.origin.y + label.frame.size.height + 10;
return height;
}
Это работает, но, похоже, плохо. Я думаю, что высоты должны быть предварительно рассчитаны для каждого элемента и для каждой ориентации. Но я не могу найти способ сделать это красиво и просто.
Не могли бы вы помочь мне?
Стиль метки ячейки (например, шрифт и смещения от границ экрана) должен быть загружен из файла пера (ячейка находится внутри пера).
Добавлен метод layourSubviews ячейки:
-(void) layoutSubviews {
[super layoutSubviews];
[self.shortDescriptionLabel resize];
CGRect longDescriptionFrame = self.longDescriptionLabel.frame;
longDescriptionFrame.origin.y = self.shortDescriptionLabel.frame.origin.y + self.shortDescriptionLabel.frame.size.height + 5;
self.longDescriptionLabel.frame = longDescriptionFrame;
[self.longDescriptionLabel resize];
}
метод изменения размера метки просто увеличивает ее высоту, чтобы вместить весь текст. Таким образом, высота ячейки вычисляется как longDescriptionLabel.bottom + 10. Простой код, но не очень красивый.