【问题标题】:How to get accurate height of label if it contains a NSAttributed String with parts of string in BOLD如果标签包含带有部分字符串的 NSAttributedString 粗体,如何获得准确的标签高度
【发布时间】:2011-11-09 23:57:30
【问题描述】:

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

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

    return size.height;
}

这在大多数情况下都有效,但是,有些字符串混合了粗体和非粗体文本,这可能会影响极端情况下所需的确切高度。

例如

有什么方法可以得到含有这种混合物的标签的准确高度?

【问题讨论】:

    标签: objective-c ios height uilabel nsattributedstring


    【解决方案1】:

    方法如下

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

    【讨论】:

      【解决方案2】:

      我也在为此苦苦挣扎。这里有几个想法:

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

      2. 计算 systemFontOfSizeboldSystemFontOfSize 之间的平均值

      + (CGFloat) getHeightOfLabel:(NSString *)text ofFontSize:(CGFloat)fontSize withConstraint:(CGSize)constraint { CGSize size1 = [文本 sizeWithFont:[UIFont systemFontOfSize:fontSize] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap]; CGSize size2 = [文本 sizeWithFont:[UIFont boldSystemFontOfSize:fontSize] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap]; 返回 (size1.height+size2.height)/2; }

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

      【讨论】:

        猜你喜欢
        • 2013-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-06
        • 1970-01-01
        相关资源
        最近更新 更多