如何使UITableViewCell的动态高度取决于内容的高度

时间:2015-07-16 06:17:51

标签: ios objective-c iphone uitableview

我有UITableViewCell的问题,我想制作每个单元格的动态高度,我试过下面的代码:

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if ([[tableView cellForRowAtIndexPath:indexPath] isKindOfClass:[CommentTableViewCell class]]) {
        CommentTableViewCell* cell = (CommentTableViewCell*)[tableView cellForRowAtIndexPath:indexPath];
        return cell.descriptionText.frame.size.height + 20.0;
    }
   return 44.0;
}

但我有错误,我有此错误的屏幕截图https://drive.google.com/file/d/0Bz4j1JqQ0tI4T1Jsb2YxWnBvSTA/view?usp=sharing

然后我在本页中使用了Mohit tomar的回答: Change UITableView height dynamically

结果: https://drive.google.com/file/d/0Bz4j1JqQ0tI4R0t4M0k5THdxNEk/view?usp=sharing

3 个答案:

答案 0 :(得分:0)

UITableView首先获取单元格高度,然后创建单元格使用cellForRowAtIndexPath方法。

所以你不能使用

CommentTableViewCell* cell = (CommentTableViewCell*)[tableView cellForRowAtIndexPath:indexPath];
  return cell.descriptionText.frame.size.height + 20.0;

获取单元格高度。 在heightForRowAtIndexPath:方法中,您必须计算每个单元格的高度以获得返回值。

答案 1 :(得分:0)

如果您的目标是iOS≥8,则可以使用动态单元格高度:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return UITableViewAutomaticDimension;
}

尽管如此,您还应提供tableView:estimatedHeightForRowAtIndexPath:并返回食者44或细胞。高度。

请同时验证您的约束条件。您的第二个屏幕截图表示您没有正确的底部约束或优先级不正确。

你提到的SO-Answer绝对是正确的,只有iOS8 +

答案 2 :(得分:0)

在tableview的heightForRowAtIndexPath中,你必须计算文本的大小并返回该大小的“height”参数。

您可以维护以下功能来计算文本的大小

- (CGSize)heightForText:(NSString *)bodyText
{
    CGRect rect = CGRectZero;
    CGSize size;
    UIFont *font = [UIFont fontWithName:@"Corbel" size:14.0];
    float iosVersion = [[[UIDevice currentDevice] systemVersion] floatValue];

   rect = [bodyText boundingRectWithSize:CGSizeMake(240, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:font} context:nil];

    size = CGSizeMake(rect.size.width, rect.size.height);
    return size;
}

并在“heightForRowAtIndexPath”中将其用作:

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

  CGSize Size = [self heightForText:yourText];
  return Size.height
}

这应该正确调整你的细胞大小