如何使用自动布局正确计算标签大小

时间:2016-03-31 07:57:51

标签: ios objective-c autolayout

我知道有类似的主题,但遗憾的是他们的解决方案不能按我的意愿运作。我有一个标签,具有特定字体,左侧的约束等于16,右侧也等于16。因此,为了计算预期的文本高度,我使用了这个:

CGSize labelSize = [[strMod fineHtmlFromString:mdl.content] sizeWithFont:self.contentLabel.font
                                                               constrainedToSize:CGSizeMake(SCREEN_WIDTH - 32, (FLT_MAX))
                                                                   lineBreakMode:NSLineBreakByWordWrapping];

        self.heightFullSizeLabel = labelSize.height;

32是一个数字,很容易计算为16 + 16(约束缩进)。 SCREEN_WIDTH定义为#define SCREEN_WIDTH [[UIScreen mainScreen] bounds].size.width

不幸的是,根据这个逻辑,我得到的高度更低,所以我不得不将32位数增加到40位。有没有办法用布局动态精确计算标签高度?

2 个答案:

答案 0 :(得分:1)

使用您的标签字体尝试此操作。

    CGRect textRect = [text boundingRectWithSize:size
                                     options:NSStringDrawingUsesLineFragmentOrigin
                                  attributes:@{NSFontAttributeName:FONT}
                                     context:nil];

    CGSize size = textRect.size;
    self.heightFullSizeLabel = size.height;

答案 1 :(得分:1)

了解文本容器大小的正确方法是使用-sizeToFit-sizeThatFits:(CGSize)size 您正在使用的那个只询问文本占用的区域,但它没有考虑填充或其他可以应用的视图相关内容。
如果使用每边都包含大量填充的UItexView,您可以看到计算上的巨大差异