【发布时间】:2014-04-07 15:19:47
【问题描述】:
阅读this article from objc.io后,我正在使用NSAttributedString'sboundingRectWithSize:options:context:方法计算某些文本的预期高度
+(CGSize)postLabelSizeForPost:(ANKPost *)post
{
CGFloat labelWidth = 220.0f;
NSAttributedString *text = [BXTPostCell mutableAttributedStringForPost:post];
NSStringDrawingOptions options = NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading;
CGRect boundingRect = [text boundingRectWithSize:CGSizeMake(labelWidth, CGFLOAT_MAX)
options:options
context:nil];
CGFloat height = (CGFloat) (ceil(boundingRect.size.height));
return CGSizeMake(labelWidth, height);
}
但是,当我使用此方法时,文本实际上并不适合此尺寸 - 尺寸始终太短。
起初,我认为问题出在表情符号字符上 - 但它似乎发生在应用程序中的许多 tableviewcells 上。
更新:
我和几个人谈过,听起来这个问题可能是boundingRectWithSize:options:context: 的一个潜在错误。我想出了一个解决方法:创建一个虚拟UILabel,赋予它与表格视图单元格中的UILabel 相同的属性(numberOfLines 等),然后使用sizeThatFits: 计算大小。可以肯定的是,这是一个 hack - 但它充分解决了我的问题。不过,我希望它更优雅!
【问题讨论】:
标签: ios ios7 nsattributedstring