UILabel 中 sizeToFit 的高度不正确

Posted

技术标签:

【中文标题】UILabel 中 sizeToFit 的高度不正确【英文标题】:the height of sizeToFit not correct in UILabel 【发布时间】:2013-09-04 01:00:50 【问题描述】:

我使用以下代码创建了一个 UILabel:

UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectZero];
textLabel.font = [UIFont systemFontOfSize:30];
textLabel.backgroundColor = [UIColor redColor];
textLabel.text = @"0";
[textLabel sizeToFit];
textLabel.center = CGPointMake(100, 100);
[self.view addSubview:textLabel];

并且 textLabel.bounds.height 似乎高于文本字体的实际高度。如下:

但是因为设计师根据实际文本大小标记两个UILabel的空间,所以我不能只为两个UILabel使用设计师的标记空间分配一个值,我需要在模拟器中运行应用程序来检查它是否正确。

我想知道如何使 UILabel sizeTofit 获得文本的真实高度,文本之间没有填充。

【问题讨论】:

【参考方案1】:

在您的示例中,0 周围有额外的空间,因为标签必须考虑字体的整套指标,Cocoanetics 在他们的博客文章"Understanding UIFont" 中有一个很好的说明。例如,只需在我的机器上运行您的代码并在“0”旁边放一个“g”,我们可以看到“g”几乎触及标签的底部:

如果您正在实现一个可以包含任意文本的标签,您的设计人员应该考虑到这一点,而不是询问占位符文本的“实际文本大小”——这可能最终是不准确的,正如我们在此处看到的那样,当占位符是只是“0”。理想情况下,他们会为您提供基线和字体,这就是您获得准确结果所需的全部内容。

如果您绝对必须精确测量字符串,NSString-sizeWith… 方法,NSAttributedString-boundingRectWithSize:…-size,Core Text 有@987654328 @。不过,所有这些都有自己的怪癖,可能不会产生您期望的结果。

【讨论】:

-boundingRectWithSize:… 可能比 -sizeWithFont… 更受欢迎,因为后者在 ios [已编辑] 中已被弃用。 啊,是的。我实际上是想说-sizeWith…,因为这将涵盖已弃用的方法及其替换。我已经编辑了我的答案以反映这一点。感谢您指出:)

以上是关于UILabel 中 sizeToFit 的高度不正确的主要内容,如果未能解决你的问题,请参考以下文章

UILabel sizeToFit 不适用于自动布局 ios6

Swift:在 sizetofit 之后无法获得标题单元格标签的正确高度

UILabel 找到适合宽度的高度

IOS UILlabel sizeToFit

ScrollView中的UILabel sizeToFit

UILabel sizeToFit 中的 UICollectionView