通过约束创建程序化UILabel?

问题描述 投票:1回答:2

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

我考虑过使用:

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

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

我也尝试使用:

CGPoint(x:, y:)

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

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

swift xcode constraints uilabel
2个回答
2
投票

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

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

让我们使用以上详细信息创建一个label。还要根据需要将widthlabel设置为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的相关labelsuperview-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)
    ])

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)
])
© www.soinside.com 2019 - 2024. All rights reserved.