2016-03-31 65 views
0

我知道有类似的主题,但不幸的是,他们的解决方案无法正常工作。我有一个带有特定字体的标签,左侧的限制等于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.有没有一种方法来精确计算标签高度与布局动态?

+0

为什么要计算它的高度? – Shai

+0

计算主卷轴的最终高度。 –

回答

1

知道文本容器的大小正确的方法是使用-sizeToFit-sizeThatFits:(CGSize)size
您使用的只是要求文本占用的区域,但它没有考虑到可以应用的填充或其他视图相关的东西。
如果您使用包含大量填充的UItexView,您可以在计算中看到巨大差异

+0

谢谢,如果你纠正我的代码片段,会不会很好,你会如此善良? –

+0

没有那么困难,只需将文本添加到标签send sizeToFit或sizeThatFits,然后读取标签的边界,然后设置self.heightFullSizeLabel。 – Andrea

+0

你的意思是我应该只添加[label sizeToFit];我宣布之后呢? –

1

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

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

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