用字体获取字符串的高度

时间:2014-06-21 13:55:08

标签: ios uifont

我正在努力弄清楚如何获得包含指定文本的UILabel的大小,特别是高度,并使用指定的字体。基本上,我想要一个返回给定字符串和字体高度的方法。

这是我到目前为止所做的:

+ (CGFloat)heightForString:(NSString *)string withFontSize:(CGFloat)size
{
    NSDictionary *attributes = @{NSFontAttributeName : [UIFont systemFontOfSize:size]};

    NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:string
                                                                           attributes:attributes];
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    CGFloat screenWidth = screenRect.size.width;

    CGRect paragraphRect =
    [attributedText boundingRectWithSize:CGSizeMake(screenWidth, CGFLOAT_MAX)
                                 options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
                                 context:nil];

    return paragraphRect.size.height;
}

这将返回一个大约应该是其大小一半的高度。我知道这个问题已被问了一百万次,但没有一个解决方案可以完全发挥作用。

2 个答案:

答案 0 :(得分:1)

使用此类别计算给定字体和最大宽度的文字高度,该字体在SOMessaging中使用

基本上我把它作为iOS6的sizeWithFont:constrainedToSize:lineBreakMode方法的替代

答案 1 :(得分:0)

我决定简单地创建一个虚拟标签,设置它的文本属性并将numberOfLines设置为0并说[label sizeToFit]这将允许您获取标签的框架,包括高度。它不是一种理想的方式,但它有效。

显然在iOS 8中会有self sizing table view cells!等不及了!