2015-08-24 2 views
0

Я создаю чат-приложение. Я показываю сообщения в UILabel и хочу отрегулировать высоту UILabel на размер и в соответствии с размером UILabel Я хочу отрегулировать высоту UITableViewCell.Как добавить ограничение по высоте в ячейку просмотра UITable

я успешно обновил высоту UILabel с помощью следующего кода:

[lblSender setTranslatesAutoresizingMaskIntoConstraints:NO]; 

NSString *text = [messagesArray objectAtIndex:indexPath.row]; 
    UIFont *font = lblSender.font; 
    CGSize maximumLabelSize = CGSizeMake(lblSender.frame.size.width,9999); 
    NSAttributedString *attributedText = 
    [[NSAttributedString alloc] initWithString:text 
            attributes:@{NSFontAttributeName: font}]; 
    CGRect rect = [attributedText boundingRectWithSize:maximumLabelSize 
               options:NSStringDrawingUsesLineFragmentOrigin 
               context:nil]; 

float height = rect.size.height; 
    CGRect newFrame = [lblSender frame]; 
    newFrame.size.height = height; 

    [lblSender addConstraints:[NSLayoutConstraint constraintsWithVisualFormat: [NSString stringWithFormat:@"H:[lblSender(==%f)]",lblSender.frame.size.width] 
                    options:0 
                    metrics:nil 
                    views:NSDictionaryOfVariableBindings(lblSender)]]; 

    [lblSender addConstraints:[NSLayoutConstraint constraintsWithVisualFormat: [NSString stringWithFormat:@"V:[lblSender(==%f)]",newFrame.size.height] 
                    options:0 
                    metrics:nil 
                    views:NSDictionaryOfVariableBindings(lblSender)]]; 


    [lblSender setFrame:newFrame]; 

    [lblSender setTranslatesAutoresizingMaskIntoConstraints:YES]; 

От этого я получаю UITable Как это:

Image 1 Image 2

Когда я же с затем ячейкой, то я не получаю никакого результата, как я могу это сделать.

+0

Я не думаю, что вам нужно добавьте любое ограничение для ячейки, вам просто нужно вернуть вычисляемую высоту ячейки в '- (CGFloat) tableView: (UITableView *) tableView heightForRowAtIndexPath: (NSIndexPath *) indexPath' Для получения дополнительной информации см. [здесь] (http: //www.raywenderlich. ком/73602/динамическая таблица с видом на клеточно высоты авто-макет) – iphonic

ответ

0

Вы не можете установить высоту ячейки внутри ячейки. Чтобы установить разную высоту для ячейки, вам нужно вернуть желаемую высоту в heightForRowAtIndexPath функции UITableViewDelegate. Apple Documentation

С точки зрения вашего кода до сих пор вы, вероятно, должны сохранять высоту в словаре для своей индексной таблицы и вызывать reloadData на вашем столеView. Затем, когда эта функция вызывается, вы должны вернуть высоту, сохраненную для его indexPath.

0

Установите оценочную высоту ячейки как tableView.estimatedRowHeight = 160.0 и не переопределяйте метод таблицы, если вы правильно применили ограничения внутри tableViewCell, высота будет рассчитана автоматически. Для детальной реализации см tutorial

0

Обновить вашу клетку и указать высоту ячейки в этом методе в соответствии с вашим indexPath

(CGFloat) Tableview: (UITableView *) Tableview heightForRowAtIndexPath: (NSIndexPath *) indexPath;

Вы не можете устанавливать ограничения на UITableViewCell.

0

Использование NSAttributedString для определения высоты ячейки является очень дорогостоящим в сроке RESSOURCES - время & вычислений - если у вас есть много (более 100) элементы в UITableView, вы будете иметь лаг свитка.

Самый лучший вариант для вас, есть, кажется, что у вас есть только 1 UILabel внутри клетки, чтобы создать 4 constraints к UILabel (вверх, вниз, влево, вправо), установите self.tableView.rowHeight, а также self.tableView.estimatedRowHeight недвижимость размер по умолчанию. Вы не должны использовать методы, делегаты (heightForRowAtIndex: и estimatedHeightForRowAtIndex:)

Тогда вы хотите, чтобы ваш UILabel расширить себя, так что вы должны установить numberOfLines свойство 0.

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