Swift/Cocoa Touch:如何在 UILabel 中将动态调整大小的文本居中?

Swift/Cocoa Touch: How do I centre dynamically resized text in a UILabel?

我有一个 UILabel 采用其父视图的大小。

我希望标签文本调整大小以适应包含视图。

override func draw(_ rect: CGRect) {

    let fontSize = self.frame.size.height * 0.9
    var font = UIFont.preferredFont(forTextStyle: .body).withSize(fontSize)
    font = UIFontMetrics(forTextStyle: .body).scaledFont(for: font)

    let label = UILabel()
    label.textAlignment = .center
    label.font = font
    label.frame.size  = self.frame.size
    label.minimumScaleFactor = 0.1
    label.numberOfLines = 1
    label.adjustsFontSizeToFitWidth = true
    label.text = "5"

    addSubview(label)
}

以上内容正是我想要的。数字 5 显示在包含视图的中心。但是,如果我将文本设置为更长的内容(例如:label.text = "5"),它的垂直位置会发生变化。

如何确保无论字符串的长度如何,文本都会在垂直和水平方向上居中。

在您的 UILabel 设置中添加这行代码。应该按预期工作。这将使标签垂直居中。

label.baselineAdjustment = .alignCenters