UILabel с - [sizeWithFont: constrainedToSize: lineBreakMode] обрезает слова - PullRequest
2 голосов
/ 26 марта 2011

UILabel внутри UITableViewCell.При нажатии на ячейку высота увеличивается, и появляется секунда UILabel с различными объемами данных.

Проблема заключается в том, что при переносе строки sizeWithFont:constrainedToSize:lineBreakMode: не возвращает правильную высоту и обрезает нижнюю строку.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    labelExpanded = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease];
    labelExpanded.font = [UIFont boldSystemFontOfSize:11];
    labelExpanded.textAlignment = UITextAlignmentLeft;
    labelExpanded.lineBreakMode = UILineBreakModeWordWrap;
    labelExpanded.numberOfLines = 0;
    [cell.contentView addSubview:labelExpanded];

    CGSize constraint = CGSizeMake(300, 20000);
    CGSize size = [expandedDetails sizeWithFont:[UIFont boldSystemFontOfSize:11] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];

    [labelExpanded setText:expandedDetails];
    [labelExpanded setFrame:CGRectMake(16, 30, 248, size.height)];
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(// Row is Expanded)
    {
        CGSize constraint = CGSizeMake(300, 20000);
        CGSize size = [sameTextAsLabel sizeWithFont:[UIFont boldSystemFontOfSize:11] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];

        // I found +8 to height added nice padding
        CGFloat height = size.height + 8;
    }
    else // Row is not expanded
        return 30;
}

Один и тот же текст подается в оба, он состоит из строки с несколькими новыми строками \n.Если строка длиннее ширины, перенос слов выполняет свою работу, но при вычислении ее динамической высоты он не включает в себя перенесенную строку.

Если я добавлю любое значение к [labelExpanded setFrame:height], например [size.height + 30] myобернутая линия обнаруживается.Однако, если строка не обернута, это добавляет ненужные пробелы.

Я не смог найти решение онлайн для этого.

Ответы [ 2 ]

7 голосов
/ 26 марта 2011

Хочу отметить, что вы рассчитываете размер на основе ширины 300, но размер этикетки составляет 248.

3 голосов
/ 26 марта 2011
    CGSize constraint = CGSizeMake(300, 20000);
    CGSize size = [expandedDetails sizeWithFont:[UIFont boldSystemFontOfSize:11] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];

    [labelExpanded setText:expandedDetails];
    [labelExpanded setFrame:CGRectMake(16, 30, 248, size.height)];

Почему ширина рамки ярлыка 248, а ширина ограничения 300?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...