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

Ios 如何使用自动布局正确计算标签大小,ios,objective-c,autolayout,Ios,Objective C,Autolayout,我知道也有类似的话题,但不幸的是他们的解决方案并没有像我想要的那样有效。我有一个标签,有特定的字体,左边的约束等于16,右边的约束也等于16。因此,为了计算预期的文本高度,我使用了以下方法: CGSize labelSize = [[strMod fineHtmlFromString:mdl.content] sizeWithFont:self.contentLabel.font

我知道也有类似的话题,但不幸的是他们的解决方案并没有像我想要的那样有效。我有一个标签,有特定的字体,左边的约束等于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(约束缩进)。屏幕宽度定义为
#定义屏幕宽度[[UIScreen mainScreen]界限].size.WIDTH


不幸的是,按照这个逻辑,我得到了我想要的更低的高度,所以我不得不将32增加到40。有没有一种方法可以通过布局动态精确计算标签高度?

用标签字体试试

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

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

用你的标签字体试试这个

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

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

了解文本容器大小的正确方法是使用
-sizeToFit
-sizeThatFits:(CGSize)size

您正在使用的视图只询问文本占用的区域,但它不考虑填充或其他可应用的与视图相关的内容。

如果使用每侧都包含大量填充的UItexView,您可以看到计算上的巨大差异

了解文本容器大小的正确方法是使用
-sizeToFit
-sizeThatFits:(CGSize)size

您正在使用的视图只询问文本占用的区域,但它不考虑填充或其他可应用的与视图相关的内容。

如果使用两边都有大量填充的UItexView,您可以看到计算结果的巨大差异

为什么要计算它的高度?为什么要计算主卷轴的最终高度?为什么要计算它的高度?计算主卷轴的最终高度。谢谢,如果您更正我的代码片段,会很好,您能这么做吗?没有那么难,只需将文本添加到标签send sizeToFit或sizeThatFits,然后读取标签的边界,然后设置self.heightFullSizeLabel。您的意思是我应该只添加[label sizeToFit];在我声明之后?首先你需要传递文本,稍后sizeToFit我尝试传递,但它给了我错误的高度(20)。[self.contentLabel sizeToFit];NSLog(@“height..%f”,self.contentLabel.frame.size.height);。我想这是因为我想在自动布局过程完成之前计算高度。如果你能更正我的代码片段,那就太好了,你会很好吗?没那么难,只需将文本添加到标签中发送sizeToFit或sizeThatFits,然后读取标签的边界,并设置self.heightFullSizeLabel。您的意思是我应该只添加[label sizeToFit];在我声明之后?首先你需要传递文本,稍后sizeToFit我尝试传递,但它给了我错误的高度(20)。[self.contentLabel sizeToFit];NSLog(@“height..%f”,self.contentLabel.frame.size.height);。我想这是因为我想在自动布局过程完成之前计算高度