如果标签包含带有BOLD部分字符串的NSAttributedString,如何获得准确的标签高度

时间:2011-09-04 06:40:54

标签: objective-c ios height uilabel nsattributedstring

我目前正在使用以下方法获取标签所需的高度

+ (CGFloat) getHeightOfLabel:(NSString *)text ofFontSize:(CGFloat)fontSize withConstraint:(CGSize)constraint
{
    CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:fontSize] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];

    return size.height;
}

这在大多数情况下都适用,但是,有些字符串由粗体和非粗体文本组成,可能会影响极端情况下所需的精确高度。

例如

enter image description here

有没有办法获得含有这种混合物的标签的准确高度?

2 个答案:

答案 0 :(得分:1)

以下是

UILabel *labelWithAtributedText = ...
CGSize size = [labelWithAtributedText sizeThatFits:CGSizeMake(maxWidth, CGFLOAT_MAX)];

答案 1 :(得分:-2)

我也在努力解决这个问题。以下是一些想法:

  1. 使用 boldSystemFontOfSize 来计算高度,因为它可以提供最大的空间(在大多数情况下,这是最糟糕的。有些标签会比需要的高一些,但我觉得它比被切断了。)

  2. 计算 systemFontOfSize boldSystemFontOfSize

  3. 之间的平均值
    + (CGFloat) getHeightOfLabel:(NSString *)text ofFontSize:(CGFloat)fontSize withConstraint:(CGSize)constraint  
    {  
        CGSize size1 = [text sizeWithFont:[UIFont systemFontOfSize:fontSize] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];  
        CGSize size2 = [text sizeWithFont:[UIFont boldSystemFontOfSize:fontSize] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];  
    
        return (size1.height+size2.height)/2;  
    }  
    

    如果你不需要实际身高,请使用[label sizeToFit],但我假设你需要这个身高:)