如何在iOS中动态处理uitableviewCell的高度?

时间:2015-03-21 13:26:10

标签: ios objective-c uitableview uistoryboard

enter image description here

这就是我现在制作的!我是iOS开发的新手。

我想要的是像Facebook这样的新闻源(cardViewUI),但根据我的单元格设计,当文本长度超过标签容量(单元格的文本容器)时,它会显示“..”,如上所示

所以我想通过文本长度动态设置增加单元格的高度。

我用mainstoryboard而不是.xib文件设计它。我尝试[标签sizeToFit]并将标签的行设置为0但到目前为止没有任何作用。

2 个答案:

答案 0 :(得分:1)

您可以按如下方式计算文字高度,

//Height For Row at index path
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellText = [NSString stringWithFormat:@"%@",[arrFullChat[indexPath.row]objectAtIndex:1]];
    UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:15.0];

    NSAttributedString *attributedText =
    [[NSAttributedString alloc]
     initWithString:cellText
     attributes:@
     {
     NSFontAttributeName: cellFont
     }];
    CGRect rect = [attributedText boundingRectWithSize:CGSizeMake(tableView.bounds.size.width - 90.0, CGFLOAT_MAX)
                                               options:NSStringDrawingUsesLineFragmentOrigin
                                               context:nil];
    return rect.size.height + 42;
}
此代码中的<42>将因您而异。尝试使用不同的值。

请勿忘记使用Autolayout或您想要的任何其他方式根据UITextView身高增加Cell身高。

答案 1 :(得分:1)

使用tableView:heightForRowAtIndexPath:,您可以在运行时给出每行的大小。现在你的问题是如何从你的字符串中获取高度,NSString类中的函数就是这个代码你的问题,

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
  NSString *str = [dataSourceArray objectAtIndex:indexPath.row];
    CGSize size = [str sizeWithFont:[UIFont fontWithName:@"Helvetica" size:17] constrainedToSize:CGSizeMake(280, 999) lineBreakMode:NSLineBreakByWordWrapping];
    NSLog(@"%f",size.height);
    return size.height + 10;
}

通过以下行设置标签s num. of line to max. so set it in cellForRowAtIndexPath:`method。

cell.textLabel.numberOfLines = 0;
  

如果您使用某个自定义单元格,则使用此管理所有标签的字符串   并获得所有高度的总和,然后设置单元格的高度。