有约束地以编程方式创建UILabel吗?

时间:2019-05-30 10:32:20

标签: swift xcode constraints uilabel

所以我想做的是每当我的代码中发生某种动作时,以编程方式创建一个新的UILabel。我知道我想给标签指定的x,y和高度,但是我不想给它指定宽度。我想约束侧面,以使UILabel的宽度等于屏幕的宽度,并且如果方向发生翻转,则标签的宽度也会改变。

我考虑过使用:

CGRect(x:, y:, width:, height:)

但是,如果使用此宽度,则必须给它设置一个固定宽度,所以我认为它不会起作用。

我也尝试使用:

CGPoint(x:, y:)

然后设置前导,尾随和高度锚点,但是,即使它可以编译,这似乎也不起作用,尝试创建新的UILabel时出现错误。

我是Swift编程的新手,所以不确定是否有明显的解决方案。

2 个答案:

答案 0 :(得分:2)

您可以使用以下代码以编程方式创建UILabel。

private let label: UILabel = {
    let label = UILabel()
    label.translatesAutoresizingMaskIntoConstraints = false
    label.numberOfLines = 0
    label.text = "Hello World"
    return label
}()

然后在viewDidLoad()内部

addSubview(label)
NSLayoutConstraint.activate([
    topAnchor.constraint(equalTo: label.topAnchor),
    bottomAnchor.constraint(equalTo: label.bottomAnchor),
    leadingAnchor.constraint(equalTo: label.leadingAnchor),
    trailingAnchor.constraint(equalTo: label.trailingAnchor)
])

答案 1 :(得分:2)

就像您说的那样,我们已经为x, y and height提供了label,即

let x: CGFloat = 0
let y: CGFloat = 0
let height: CGFloat = 50

让我们使用以上详细信息创建一个label。还要根据需要将width中的label设置为UIScreen.main.bounds.width

let label = UILabel(frame: CGRect(x: x, y: y, width: UIScreen.main.bounds.width, height: height))
label.text = "This is a sample text"

不要忘记将label's translatesAutoresizingMaskIntoConstraints 设置为false,并将其添加到您想要的subview中。

label.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(label)

constraints中的相关label及其superview-top, bottom, leading, height添加。如果需要,您绝对可以添加bottom constraint。这完全取决于您的UI。

我正在将label添加到top of the viewController's view

NSLayoutConstraint.activate([
    label.heightAnchor.constraint(equalToConstant: height),
    view.topAnchor.constraint(equalTo: label.topAnchor),
    view.leadingAnchor.constraint(equalTo: label.leadingAnchor),
    view.trailingAnchor.constraint(equalTo: label.trailingAnchor)
    ])