所以我想做的是每当我的代码中发生某种动作时,以编程方式创建一个新的UILabel。我知道我想给标签指定的x,y和高度,但是我不想给它指定宽度。我想约束侧面,以使UILabel的宽度等于屏幕的宽度,并且如果方向发生翻转,则标签的宽度也会改变。
我考虑过使用:
CGRect(x:, y:, width:, height:)
但是,如果使用此宽度,则必须给它设置一个固定宽度,所以我认为它不会起作用。
我也尝试使用:
CGPoint(x:, y:)
然后设置前导,尾随和高度锚点,但是,即使它可以编译,这似乎也不起作用,尝试创建新的UILabel时出现错误。
我是Swift编程的新手,所以不确定是否有明显的解决方案。
答案 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)
])