设置为自动换行时如何获取UILabel文本的实际宽度

时间:2016-09-15 22:55:31

标签: ios swift uilabel

我有以下代码来设置UILabel:

let label = UILabel()
label.numberOfLines = 0
label.textAlignment = .center
label.lineBreakMode = .byWordWrapping
label.preferredMaxLayoutWidth = maxWidth

label.text = "String that is long enough to cause word wrap."

label.sizeToFit()
self.view.addSubview(label)

我需要的结果是标签将文本包裹起来,就像它到达label.preferredMaxLayoutWidth一样,然后实际上将其自身调整到足够宽以适合包装文本。这是一个图表来说明: enter image description here

红色框的宽度等于label.preferredMaxLayoutWidth,这是我上面的代码获得的实际尺寸。 黑盒子是我希望它的大小。 无论标签的大小是红色还是黑色,包装都是相同的。

那么,如何在保持当前自动换行的同时将标签调整为尽可能小的宽度?

修改

虽然约束可能是通常的选择,但就我而言,我认为不是因为我根据此标签的结果大小调整了我的超级视图。

1 个答案:

答案 0 :(得分:2)

好的,我刚想通了。 @rmaddy在上面的问题评论中是正确的。在提出这个问题之前我曾见过@IBOutlet weak var pointsView: UIView! { didSet { pointsView.setRound() } } ,但有些问题很快就搞清楚了。但现在我已经得到了它。这是我更新的代码:

让label = UILabel()

extension UIView {
    func setRound() {
        self.layer.cornerRadius = self.bounds.width / 2
    }
}