2015-12-22 2 views
2

У меня есть таблица, в которой будут отображаться комментарии. Разумеется, они могут иметь разную длину, что означает, что каждая ячейка нуждается в определенной высоте.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; 

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

Должен ли я делать это по-другому?

+0

Возможно, вы должны использовать автоматическую компоновку, а не жестко кодированные кадры. Проверьте http://www.raywenderlich.com/87975/dynamic-table-view-cell-height-ios-8-swift. –

+0

@ Jacob, Если я понял ваш код, я думаю, что проблема заключается в получении getSizeLabel.text = cLine.commentTxt; он не основан на значении строки в таблице indexview indexpath. –

+0

Я думаю, что вы ищете [это] (http://stackoverflow.com/questions/18746929/using-auto-layout-in-uitableview-for-dynamic-cell-layouts-variable-row-heights?rq=1) – Smile

ответ

1

Я нашел проблему с исходным решением.

Причина, перепутались рендеринга, потому что я только выполняется этот код, когда клетка была равна нулю:

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; 

После того, как я изменил его исполнения на ячейки каждый раз, все выглядит и работает правильно , Я буду продолжать использовать это решение, потому что оно не зависит от PureLayout.

+0

это мне очень помогает .. – Simmy

Смежные вопросы