lic*_*853 11 nsattributedstring
我想显示3行NSAttributedString.有没有办法根据宽度和线数找出所需的高度?
而且我不想创建UILabel来进行大小计算,因为我希望计算在后台线程中完成.
我想知道为什么这仍然没有答案.无论如何,这是最适合我的方法.
创建一个名为"Height"的NSAttributedString类别.这应该生成两个名为"NSAttributedString + Height.{h,m}"的文件.
在.h文件中:
@interface NSAttributedString (Height)
-(CGFloat)heightForWidth:(CGFloat)width;
@end
Run Code Online (Sandbox Code Playgroud)
在.m文件中:
-(CGFloat)heightForWidth:(CGFloat)width
{
return ceilf(CGRectGetHeight([self boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX)
options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading
context:nil])) + 1;
}
Run Code Online (Sandbox Code Playgroud)
这是发生了什么:
这是如何使用它
NSAttributedString *string = ...
CGFloat height = [string heightForWidth:320.0f];
Run Code Online (Sandbox Code Playgroud)
您可以使用该高度进行布局计算.
@dezinezync 的回答回答了问题的一半。您只需要计算给定宽度和行数的 UILabel 允许的最大尺寸。
首先,根据行数获取允许的高度:
let maxHeight = font.lineHeight * numberOfLines
Run Code Online (Sandbox Code Playgroud)
然后根据条件计算您设置的文本的边界矩形:
let labelStringSize = yourText.boundingRectWithSize(CGSizeMake(CGRectGetWidth(self.frame), maxHeight),
options: NSStringDrawingOptions.UsesLineFragmentOrigin,
attributes: [NSFontAttributeName: font],
context: nil).size
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5398 次 |
| 最近记录: |