根据文本内容的高度设置单元格的高度

时间:2015-04-28 08:55:29

标签: ios uitableview fonts height tableviewcell

我有一个包含动态单元格的表。在每个单元格中,我有textLabel和detailTextLabel。我想将单元格高度设置为等于textLabel和detailTextLabel的高度之和。这是我的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

cell.textLabel.numberOfLines = 0;

cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;

cell.detailTextLabel.numberOfLines = 0;

cell.detailTextLabel.lineBreakMode = UILineBreakModeWordWrap;

cell.textLabel.text=text;

cell.detailTextLabel.text=detailText;


return cell;
}

我该怎么做?

2 个答案:

答案 0 :(得分:3)

如果你在iOS8上使用AutoLayout,一个重要的部分就是告诉UITableView"自动覆盖":

self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.estimatedRowHeight = 50.0; // your estimated average cell height

此外,最好使用自定义单元格并覆盖方法" layoutSubviews":

- (void)layoutSubviews
{
    [super layoutSubviews];

    // Make sure the contentView does a layout pass here so that its subviews have their frames set, which we
    // need to use to set the preferredMaxLayoutWidth below.
    [self.contentView setNeedsLayout];
    [self.contentView layoutIfNeeded];


    self.details.preferredMaxLayoutWidth = CGRectGetWidth(self.details.frame);
}

在github上查看此Example Project

答案 1 :(得分:0)

以下代码为UILabel的动态高度。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath   *)indexPath{
          if ( [detailText length] <= 0 ){
            CGSize constraint = CGSizeMake(450, 40000.0f);
            CGSize size = [detailText sizeWithFont:[UIFont fontWithName:@"Helvetica" size:14] constrainedToSize:constraint lineBreakMode:UILineBreakModeCharacterWrap];
            size.height = MAX(size.height,36);

            return 50+size.height;
        }
    return 150;
}

这有助于解决您的问题。