【问题标题】:How do I get the size of a string truncated by UILabel?如何获取被 UILabel 截断的字符串的大小?
【发布时间】:2011-02-12 05:34:33
【问题描述】:

我需要找到将在 UILabel 中绘制的字符串的屏幕尺寸 (CGSize)。我知道我可以使用:

-(CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(UILineBreakMode)lineBreakMode

但是,要找到字符串的大小,它不会考虑 UILabel 允许您指定的最大行数。

如果我的 UILabel 将 numberOfLines 设置为 2,并且它接收到一个被截断的长字符串,我该如何找到 UILabel 将要绘制的字符串的大小 (CGSize)?

谢谢!

【问题讨论】:

    标签: objective-c uikit nsstring


    【解决方案1】:

    您可以获取字体的lineHeight 属性并将其乘以行数,然后将其作为constrainedToSize: 参数的最大高度输入。类似于以下内容:

    UIFont *font = getFont();
    CGFloat maxHeight = font.lineHeight * label.numberOfLines;
    CGFloat maxWidth = getWidth();
    CGSize size = [label.text sizeWithFont:font constrainedToSize:(CGSize){maxWidth, maxHeight} lineBreakMode:label.lineBreakMode];
    

    【讨论】:

    • 我发布的代码无法处理 numberOfLines 为 0 的情况,因此如果有可能,您可能想要执行类似 CGFloat maxHeight = (label.numberOfLines > 0 ? font.lineHeight * label.numberOfLines : CGFLOAT_MAX); 的操作
    • 原来如此,并且“lineHeight”仅在 4.0 及更高版本中受支持。由于我需要它在 3.2 及更高版本中运行,我默认使用 lineHeight,但如果它不响应 lineheight,我使用 sizeWithFont:constrainToSize: 和 CGFLOAT_MAX 宽度,并从中检索高度。欢乐时光!
    • @Saltymule lineHeight 的旧名称是 leading。这个属性在 4.0 中被弃用,取而代之的是 lineHeight,因为它被错误命名(它不代表字体的前导,而是基线之间的距离。实际的前导是这个值减去 ascender - descender)。如果您支持 4.0 及更高版本,请使用 lineHeight。如果您支持 3.2,请使用 leading。唯一的区别在于名称。
    猜你喜欢
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 2011-06-05
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多