我正在尝试根据单元格中某些标签的内容实现动态UITableViewCell高度。单元格中添加了一些其他UI对象(图像视图,一些静态标签等),我已经为所有内容设置了约束。只需要动态调整一个标签。
我使用此方法查找文本的大小:
-(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像素高。如果单元格不需要调整大小,或者如果需要调整大小,则返回文本高度+足够的像素以适合单元格中的所有其他对象,那么我必须返回91吗?我对如何调整细胞大小非常困惑。标签正在调整大小,但无法弄清楚细胞。
答案 0 :(得分:1)
当您使用ios7 +时,请尝试
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
而不是tableView:heightForRowAtIndexPath
。
并返回一个具有所需高度偏移量的CGFloat。