当前位置 : 主页 > 手机开发 > ios >

ios – UILabel中sizeToFit的高度不正确

来源:互联网 收集:自由互联 发布时间:2021-06-11
我用以下代码创建了一个UILabel: UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectZero];textLabel.font = [UIFont systemFontOfSize:30];textLabel.backgroundColor = [UIColor redColor];textLabel.text = @"0";[textLabel sizeTo
我用以下代码创建了一个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使用设计器的标记空间分配一个值,我需要在模拟器中运行app来检查它是否正确.

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

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

如果您正在实现一个可以包含任意文本的标签,您的设计师应该考虑到这一点,而不是要求占位符文本的“真实文本大小” – 这可能最终会导致不准确,因为我们可以看到这里占位符只是“0” ”.理想情况下,他们会为您提供基线和字体,这就是获得准确结果所需的全部内容.

如果你必须精确测量字符串,NSString有-sizeWith …方法,NSAttributedString有-boundingRectWithSize:…和-size,而Core Text有CTFramesetterSuggestFrameSizeWithConstraints().所有这些都有它们自己的怪癖,但可能无法产生你期望的结果.

网友评论