UILabel中的文本未垂直居中

65

我用下面的代码创建了一个标签:

func setupValueLabel() {
    valueLabel.numberOfLines = 1
    valueLabel.font = UIFont(name: "Avenir-Black", size: 50)
    valueLabel.adjustsFontSizeToFitWidth = true
    valueLabel.clipsToBounds = true
    valueLabel.backgroundColor = UIColor.greenColor()
    valueLabel.textColor = valuesColor
    valueLabel.textAlignment = NSTextAlignment.Center
}

我不太明白为什么,但该标签的垂直居中对齐有问题:

标签未居中对齐

我需要做些特定的事情才能将其居中对齐吗?


1
这可能有点傻,但你能检查一下你的标签文本中是否有额外的换行符\n吗?顺便说一下,代码看起来很好。 - Eugene
这是我立即检查的,但是我不确定! - Loadex
2
你能试着减小字体大小吗?看起来 lineHeight 是50,但是由于 adjustsFontSizeToFitWidth=true 字体大小被缩小了。 - rintaro
我理解。但是目前,我没有解决方案。 - rintaro
这是框架的某种错误还是这种行为被认为是正常的? - Loadex
显示剩余4条评论
2个回答

141
问题在于通过设置adjustsFontSizeToFitWidth = true,字体大小被缩小了,但它并不会自动调整lineHeight,而是保留原始字体大小50
默认情况下,文本与基线对齐。您可以使用baselineAdjustment属性进行调整。
在您的情况下,您应该将其设置为UIBaselineAdjustment.alignCenters
valueLabel.baselineAdjustment = .alignCenters

40
没用,baselineAdjustment = .AlignCenters 对我无效。是否可能对于某些自定义字体不起作用? - pietrorea
完美的答案。 - jomafer

23

多亏了 @rintaro,最终它可以工作了。

对于我的情况,还有一件事,它之前没有工作是因为我设置了ByWordWrapping,我必须将lineBreakMode设置为ByClipping


1
谢谢。这对我也起作用了。但是为什么只有“ByClipping”可以解决问题,其他模式不行呢? - Tobonaut
非常感谢!即使使用 byTruncatingTail,它也适用于我(我通过属性字符串将其设置为 NSParagraphStyle,没有检查过没有它 - 它只是起作用了)。 - Akhrameev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接