ios - UILabel 中 sizeToFit 的高度不正确

标签 ios objective-c uilabel

我使用以下代码创建了一个 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 似乎高于文本字体的实际高度。像下面这样: enter image description here

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

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

最佳答案

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

"0g" metrics

如果您正在实现一个可以包含任意文本的标签,您的设计师应该考虑到这一点,而不是要求占位符文本的“真实文本大小”——当占位符是只是“0”。理想情况下,他们会为您提供基线和字体,这就是您获得准确结果所需的一切。

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

关于ios - UILabel 中 sizeToFit 的高度不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18603809/

相关文章:

iphone - 子类化 UIToolbar 的正确方法

iphone - UIView 与核心图形

ios - 如何在UITableView的UiLabel中单击特定位置?

ios - UIView中UILabel嵌入的多行问题

ios - 在 UINavigationBar 中单击 "Back"按钮时 UIScrollView 滚动

objective-c - Xcode 基于 Debug 而不是 Release

ios - 关于不使用 `release` 的代码的 Objective-C 内存管理

iphone - 如何在 UILabel 上获取 "deselect"通知

供多个开发人员共享 iOS Xcode 项目文件

ios - Firebase CocoaPods 太大 (70mb)