我有以下代码来设置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
一样,然后实际上将其自身调整到足够宽以适合包装文本。这是一个图表来说明:
红色框的宽度等于label.preferredMaxLayoutWidth
,这是我上面的代码获得的实际尺寸。
黑盒子是我希望它的大小。
无论标签的大小是红色还是黑色,包装都是相同的。
那么,如何在保持当前自动换行的同时将标签调整为尽可能小的宽度?
修改
虽然约束可能是通常的选择,但就我而言,我认为不是因为我根据此标签的结果大小调整了我的超级视图。
答案 0 :(得分:2)
好的,我刚想通了。 @rmaddy在上面的问题评论中是正确的。在提出这个问题之前我曾见过@IBOutlet weak var pointsView: UIView! {
didSet {
pointsView.setRound()
}
}
,但有些问题很快就搞清楚了。但现在我已经得到了它。这是我更新的代码:
让label = UILabel()
extension UIView {
func setRound() {
self.layer.cornerRadius = self.bounds.width / 2
}
}