UILabel与 - [sizeWithFont:constrainedToSize:lineBreakMode]正在切断单词

时间:2011-03-26 00:26:44

标签: iphone uikit

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]我的包装线就会出现。但是,如果未包装该行,则会添加不必要的空格。

我无法在网上找到解决方案。

2 个答案:

答案 0 :(得分:7)

我注意到的一件事是您正在根据宽度300计算尺寸,但是将尺寸调整为248。

答案 1 :(得分:3)

    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?

相关问题