我已经完成了很多阅读,但似乎没有简单的解决方案。
我正在尝试创建一个加载NSArray
NSString
个评论的应用,以显示在UITableView
中。评论的大小各不相同。
如何让单元格调整其大小以显示每条评论的全部内容?
我试图找到一个简单的解决方案,而不是使用魔术CFloat
数字。
在Apple的API中是否有一种方法可以让我在给定cell.detailTextLabel
注释和固定宽度的情况下计算NSString
所需的高度?
我想如果我可以计算这个高度,那么所需要的只是设置单元格的高度和行的高度。
由于我已经阅读了heightForRow:AtIndexPath:
被调用时尚未创建的单元格,因此不确定要执行此操作的顺序。
答案 0 :(得分:2)
计算tableView:heightForRowAtIndexPath:
您需要在iOS 7及以上版本的iOS 7及boundingRectWithSize:options:context:
上使用sizeWithFont:forWidth:lineBreakMode:
。有关详细信息,请参阅Apple文档。
UIFont *font = [UIFont oka_commentLabelFont];
NSString *text = [self commentForIndexPath:indexPath];
CGFloat cellWidth = 300.f;
CGSize boundingSize = CGSizeMake(widthForCell, CGFLOAT_MAX);
CGSize size;
if ([text respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)]) {
size = [text boundingRectWithSize:boundingSize
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{ NSFontAttributeName : font }
context:nil].size;
} else {
size = [text sizeWithFont:font
constrainedToSize:boundingSize
lineBreakMode:NSLineBreakModeWordWrap];
}
return size.height;
您需要将字体设置为要在单元格上使用的相同字体。如果你将它放在performUpdates
的{{1}}块中,那么你将得到一个很好的扩展动画。
答案 1 :(得分:1)
不要设置单元格的高度,设置行的高度,表视图将完成其余的工作。
要计算文字的高度,请询问带有textRectForBounds:limitedToNumberOfLines:
的标签,或者使用sizeWithFont:constrainedToSize:lineBreakMode:
等多种方法之一询问字符串。
与单元格的大小相比,您可能需要在标签周围处理填充。
答案 2 :(得分:0)
是的,我们可以根据字体和换行模式计算UILabel
的高度。
UIFont * font = [UIFont systemFontOfSize:12.0];
CGSize newSize = [text sizeWithAttributes:@{NSFontAttributeName:font}];// You can add other attributes in dictionary to like line break mode.
此处您为UILabel
中的文字设置了新尺寸,现在使用hegihtForCellAtIndexPath
方法可以更改UITableViewCell
的尺寸。 newSize.height
是label
所需的高度,现在您可以为偏移量添加一些值并将其返回。
答案 3 :(得分:-1)
使用
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return [super tableView:tableView heightForRowAtIndexPath:indexPath];
}