我想显示3行NSAttributedString。有没有一种方法可以根据宽度和行数来确定所需的高度?

而且我不想创建UILabel来进行大小计算,因为我希望计算在后台线程中完成。

最佳答案

我不知道为什么仍然没有答案。无论如何,这是最适合我的最快方法。

制作一个名为“Height”的NSAttributedString类别。这将生成两个名为“NSAttributedString + Height。{h,m}”的文件。

在.h文件中:

@interface NSAttributedString (Height)
-(CGFloat)heightForWidth:(CGFloat)width;
@end

在.m文件中:
-(CGFloat)heightForWidth:(CGFloat)width
{
    return ceilf(CGRectGetHeight([self boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX)
                                                    options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading
                                                    context:nil])) + 1;
}

这是正在发生的事情:
  • boundRectWithSize:options:context获得的rect限制为传递给该方法的宽度。 NSStringDrawingUsesLineFragmentOrigin选项告诉它期望多行字符串。
  • 然后我们从该rect获取height参数。
  • 在iOS 7中,此方法返回小数。我们需要一个圆的图。 ceilf对此提供了帮助。
  • 我们在返回值中添加了一个额外的单位。

  • 这是使用方法
    NSAttributedString *string = ...
    CGFloat height = [string heightForWidth:320.0f];
    

    您可以使用该高度进行布局计算。

    关于nsattributedstring - 给定宽度和行数,如何计算NSAttributedString的高度?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18888013/

    10-12 14:33