ios7故事板基于标签内容的动态uitableview单元格



我试图根据单元格中某些标签的内容实现动态uietableviewcell高度。该单元格在其中添加了其他一些UI对象(图像视图,一些静态标签等),我对所有内容设置了约束。只有一个标签需要动态尺寸。

im使用此方法查找文本的大小:

-(CGFloat)getLabelHeightForText:(NSString *)text andWidth:(CGFloat)labelWidth
{
    CGSize maximumSize = CGSizeMake(labelWidth, 10000);
    UIFont *systemFont = [UIFont systemFontOfSize:15.0];
                               lineBreakMode:NSLineBreakByWordWrapping];
    CGSize labelSize = [text boundingRectWithSize:maximumSize options: NSStringDrawingUsesLineFragmentOrigin
                                       attributes: @{ NSFontAttributeName: systemFont } context: nil].size;
    return labelSize.height;
}

我确定有一种更好的方法可以做到这一点,但现在起作用。

在CellForrowatIndExpath中,请调整标签以保持文本并设置适当的属性:

UILabel *reviewLabel = (UILabel *)[cell viewWithTag:102];
    //280 is the width of the label
    reviewLabel.preferredMaxLayoutWidth = 280;
    CGFloat reviewLabelHeight = [self getLabelHeightForText:reviewText andWidth:reviewLabel.frame.size.width];
    reviewLabel.frame = CGRectMake(reviewLabel.frame.origin.x, reviewLabel.frame.origin.y, reviewLabel.frame.size.width, reviewLabelHeight);
    reviewLabel.text = reviewText;
    reviewLabel.numberOfLines = 0;
    reviewLabel.lineBreakMode = NSLineBreakByWordWrapping;

效果很好,但是我在调整实际单元格高度大小的情况下遇到困难。现在我有

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *reviewText = [review objectForKey:@"reviewText"];
//280 is the width of the review label
CGFloat textHeight = [self getLabelHeightForText:reviewText andWidth:280]; 
}

,但我不确定如何使用该文本高度调整单元格大小。如果文本长度足够小,则不需要调整大小,则单元格通常高91 px。因此,如果小区不需要调整大小,或者确实需要调整大小,我必须返回91,或者返回文本高度 足够的像素以适合单元格中的所有其他对象?我对如何调整电池的大小非常困惑。该标签调整了大小的尺寸,但无法弄清楚细胞。

在使用ios7 时,请尝试

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath

而不是tableView:heightForRowAtIndexPath

并返回带有所需高度偏移的cgfloat。

最新更新