У меня есть таблица, в которой будут отображаться комментарии. Разумеется, они могут иметь разную длину, что означает, что каждая ячейка нуждается в определенной высоте.iOS - Изменить размер рамки CustomCell для таблицы - прокрутка беспорядочного рендеринга
Когда я делаю таблицы, у меня обычно есть пользовательская ячейка, где я определяю размер кадра с помощью CGRectMake для каждой метки. С текстовой меткой комментария кадр не может иметь одинаковую высоту все время.
То, что я сделал, было реализовать код в:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
который рассчитать необходимый размер для текста комментария кадра:
UILabel *gettingSizeLabel = [[UILabel alloc] init];
gettingSizeLabel.font = [UIFont systemFontOfSize:13];
gettingSizeLabel.text = cLine.commentTxt;
gettingSizeLabel.numberOfLines = 0;
gettingSizeLabel.lineBreakMode = NSLineBreakByWordWrapping;
CGSize maximumLabelSize = CGSizeMake(commentsListTableView.contentSize.width-15, 9999);
CGSize expectSize = [gettingSizeLabel sizeThatFits:maximumLabelSize];
CGRect frame= CGRectMake(15, 25, expectSize.width, expectSize.height);
cell.CommentLabel.frame = frame;
Тогда в:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
я поставил тот же код плюс разделитель для некоторых других меток, которые всегда имеют одинаковую высоту:
UILabel *gettingSizeLabel = [[UILabel alloc] init];
gettingSizeLabel.font = [UIFont systemFontOfSize:13];
gettingSizeLabel.text = cLine.commentTxt;
gettingSizeLabel.numberOfLines = 0;
gettingSizeLabel.lineBreakMode = NSLineBreakByWordWrapping;
CGSize maximumLabelSize = CGSizeMake(commentsListTableView.contentSize.width-15, 9999);
CGSize expectSize = [gettingSizeLabel sizeThatFits:maximumLabelSize];
return expectSize.height+30;
Он выглядит как работающий, но когда я прокручиваю его в таблице, я вижу, что иногда кажется, что он запутывает вычисления и переполняет текст для следующих ячеек. Странно, кажется, это те же самые ячейки, которые испортились каждый раз.
Должен ли я делать это по-другому?
Возможно, вы должны использовать автоматическую компоновку, а не жестко кодированные кадры. Проверьте http://www.raywenderlich.com/87975/dynamic-table-view-cell-height-ios-8-swift. –
@ Jacob, Если я понял ваш код, я думаю, что проблема заключается в получении getSizeLabel.text = cLine.commentTxt; он не основан на значении строки в таблице indexview indexpath. –
Я думаю, что вы ищете [это] (http://stackoverflow.com/questions/18746929/using-auto-layout-in-uitableview-for-dynamic-cell-layouts-variable-row-heights?rq=1) – Smile