首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何动态计算UILabel高度?

如何动态计算UILabel高度?
EN

Stack Overflow用户
提问于 2011-08-24 18:32:44
回答 10查看 118.8K关注 0票数 75

我想从相同的给定文本中动态计算UILabel的行数和高度。

EN

回答 10

Stack Overflow用户

发布于 2011-08-24 18:38:08

在UILabel实例上调用-sizeToFit将自动调整其大小以适应其显示的文本,无需计算。如果你需要大小,你可以在那之后从label的frame属性中得到它。

代码语言:javascript
复制
label.numberOfLines = 0; // allows label to have as many lines as needed
label.text = @"some long text";
[label sizeToFit];
NSLog(@"Label's frame is: %@", NSStringFromCGRect(label.frame));
票数 57
EN

Stack Overflow用户

发布于 2013-07-31 03:58:48

从iOS 7开始,当前的解决方案已被弃用。

以下是更新后的解决方案:

代码语言:javascript
复制
+ (CGFloat)heightOfCellWithIngredientLine:(NSString *)ingredientLine
                       withSuperviewWidth:(CGFloat)superviewWidth
{
    CGFloat labelWidth                  = superviewWidth - 30.0f;
    //    use the known label width with a maximum height of 100 points
    CGSize labelContraints              = CGSizeMake(labelWidth, 100.0f);

    NSStringDrawingContext *context     = [[NSStringDrawingContext alloc] init];

    CGRect labelRect                    = [ingredientLine boundingRectWithSize:labelContraints
                                                        options:NSStringDrawingUsesLineFragmentOrigin
                                                     attributes:nil
                                                        context:context];

    //    return the calculated required height of the cell considering the label
    return labelRect.size.height;
}

我的解决方案设置为这样的原因是因为我使用了一个UITableViewCell,并根据标签将占用的空间动态地调整单元格大小。

票数 17
EN

Stack Overflow用户

发布于 2015-02-17 09:14:12

在不调用sizeToFit的情况下,您可以使用即插即用的解决方案以数字方式完成所有这些操作:

代码语言:javascript
复制
+ (CGFloat)heightForText:(NSString*)text font:(UIFont*)font withinWidth:(CGFloat)width {
    CGSize size = [text sizeWithAttributes:@{NSFontAttributeName:font}];
    CGFloat area = size.height * size.width;
    CGFloat height = roundf(area / width);
    return ceilf(height / font.lineHeight) * font.lineHeight;
}

我经常在动态分配高度的UITableViewCells中使用它。

@Salman Zaidi也解决了属性问题。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7174007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档