UITabel在UITableViewCell中的高度问题

时间:2014-05-30 10:12:53

标签: ios uitableview uilabel

我在UITableViewCell中遇到UILabel的问题,很好地扩展了它的高度。但是当重新使用单元格并且UILabel文本发生变化时,向下滚动会在我向下滚动时传递正确高度的标签,现在是错误的。

据我所知,这是UILabel高度的一个问题,但我不明白 为什么它会发生。

下面是一段关于它发生的视频:

UITableView

你可以看到图像下面的表格单元格中的标签看起来很好,但是当我向上滚动时,它们突然只有两行,而不是四行。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    InstagramMedia *media = mediaArray[indexPath.section];

    CGSize maximumLabelSize = CGSizeMake(304.0f, 20000.0f);
    CGSize expectedLabelSize = [media.caption.text sizeWithFont:[UIFont systemFontOfSize:13.0f] constrainedToSize:maximumLabelSize lineBreakMode:NSLineBreakByWordWrapping];

    return (320.0f + expectedLabelSize.height + 20.0f);
}

我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:2)

试试这个:

- (CGFloat)tableView:(UITableView *)_tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{

    UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 186, 0)]; //max width that is allowed for label
    lbl.numberOfLines = 0;
    lbl.lineBreakMode = NSLineBreakByWordWrapping;

    int GAP = 3;
    float height = 0;
    float fontSize = 14;
    NSString *cellText = yourtext;
    lbl.font= [ UIFont fontWithName:FONT_NAME_Ubuntu size: fontSize];
    bl.text = cellText;
    [lbl sizeToFit];
    height += lbl.frame.size.height;
    height += GAP;

    return height;
  }         

或者你可以试试这个:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{

        /*
        for dynamic cell heigh according to the description display in cell
         */

        NSDictionary *dict1 = (NSDictionary*)[array objectAtIndex:indexPath.row];
        NSString *cellText = [dict1 valueForKey:@"test"];
        UIFont *cellFont = [UIFont fontWithName:FONT_NAME_GOTHAM_4 size:11.0];
        CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT);
        CGSize labelSize = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:NSLineBreakByWordWrapping];


            return labelSize.height + 80;


}

答案 1 :(得分:2)

我尝试使用稍微不同的方法,它在模拟器中工作。细胞在滚动时保持高度。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    InstagramMedia *media = mediaArray[indexPath.section];

    NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"HelveticaNeue" size:12], NSFonatAttributeName, nil];
    NSAttributedString *textStr = [[NSAttrebutedString alloc]initWithString:media.caption.text attributes:attributes];
    CGSize maximumLabelSize = CGSizeMake(304.0f, 20000.0f);
    CGRect expLblRect = [textStr boundingRectWithSize:maximumLabelSize options:NSStringDrawingUsesLineFragmentOrigin context:nil];

    return (320.0f + expLblFrame.size.height + 20.0f);
}