以编程方式固定宽度,动态高度UILabel?

时间:2016-11-22 10:00:14

标签: swift uilabel

我有一个UILabel的文字发生了变化。它有一个背景颜色,我想要始终是相同的宽度,但如果需要适合文本,它的高度要改变。有人知道我怎么做吗?

以下是我尝试的内容:

    label.numberOfLines = 0
    label.center = self.view.center
    label.textAlignment = .center
    label.widthAnchor.constraint(equalToConstant: 50.0).isActive = true
    label.sizeToFit()

2 个答案:

答案 0 :(得分:1)

您应该对autolayout进行一些阅读,并了解如何使用它来构建您的观点,但是,从我可以收集的内容看起来您希望标签:

  • 位于屏幕中央
  • 有固定宽度
  • 有背景色
  • 展开以垂直适合其内容
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.backgroundColor = UIColor.greenColor()
label.numberOfLines = 0
label.textAlignment = .Center
label.text = "This is\nsome multiline\nlabel\nwith a background\n colour"
self.view.addSubview(label)

let width = NSLayoutConstraint(item: label, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 50)
let centerX = NSLayoutConstraint(item: label, attribute: .CenterX, relatedBy: .Equal, toItem: self.view, attribute: .CenterX, multiplier: 1, constant: 0)
let centerY = NSLayoutConstraint(item: label, attribute: .CenterY, relatedBy: .Equal, toItem: self.view, attribute: .CenterY, multiplier: 1, constant: 0)

self.view.addConstraints([width, centerX, centerY])

以上代码使用自动布局生成绿色标签,有screenshot here

使用numberOfLines = 0可确保视图知道标签可以展开以适合其内容。

如果你阅读它们,布局约束应该是自我解释的,我们将标签的宽度设置为50然后我们将中心X和Y的约束设置为等于我们添加标签的视图。

这就是你追求的吗? - 如果没有,您可以更新您的问题,以包含您正在尝试制作的模型图像。

答案 1 :(得分:-1)

考虑到您正在使用自动布局并希望将标签锚定到其上方的视图,您可以设置顶部正确然后,该标签的约束将UILabel的{​​{1}}设置为0。