Swift 3以编程方式创buildUILabel并添加NSLayoutConstraints

你好,我正在试图创build一个标签编程,并添加NSLayoutConstraints,使它在超级视图中居中,无论屏幕的大小和方向等我看了,但没有find一个示例遵循。 这是我有什么:

let codedLabel:UILabel = UILabel() codedLabel.frame = CGRect(x: 100, y: 100, width: 200, height: 200) codedLabel.textAlignment = .center codedLabel.text = alertText codedLabel.numberOfLines=1 codedLabel.textColor=UIColor.red codedLabel.font=UIFont.systemFont(ofSize: 22) codedLabel.backgroundColor=UIColor.lightGray let heightConstraint:NSLayoutConstraint = NSLayoutConstraint(item: codedLabel, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: 200) let widthConstraint:NSLayoutConstraint = NSLayoutConstraint(item: codedLabel, attribute: NSLayoutAttribute.width, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: 200) codedLabel.addConstraints([heightConstraint, widthConstraint]) let verticalConstraint:NSLayoutConstraint = NSLayoutConstraint(item: codedLabel, attribute: NSLayoutAttribute.centerY, relatedBy: NSLayoutRelation.equal, toItem: self.contentView, attribute: NSLayoutAttribute.centerY, multiplier: 1, constant: 0) let horizontalConstraint:NSLayoutConstraint = NSLayoutConstraint(item: codedLabel, attribute: NSLayoutAttribute.centerX, relatedBy: NSLayoutRelation.equal, toItem: self.contentView, attribute: NSLayoutAttribute.centerX, multiplier: 1, constant: 0) self.contentView.addConstraints([verticalConstraint, horizontalConstraint]) self.contentView.addSubview(codedLabel) 

以下面的代码为例

 let lblNew = UILabel() lblNew.backgroundColor = UIColor.blue lblNew.text = "Test" lblNew.textColor = UIColor.white lblNew.translatesAutoresizingMaskIntoConstraints = false view.addSubview(lblNew) let widthConstraint = NSLayoutConstraint(item: lblNew, attribute: NSLayoutAttribute.width, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: 300) let heightConstraint = NSLayoutConstraint(item: lblNew, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: 200) var constraints = NSLayoutConstraint.constraints( withVisualFormat: "V:[superview]-(<=1)-[label]", options: NSLayoutFormatOptions.alignAllCenterX, metrics: nil, views: ["superview":view, "label":lblNew]) view.addConstraints(constraints) // Center vertically constraints = NSLayoutConstraint.constraints( withVisualFormat: "H:[superview]-(<=1)-[label]", options: NSLayoutFormatOptions.alignAllCenterY, metrics: nil, views: ["superview":view, "label":lblNew]) view.addConstraints(constraints) view.addConstraints([ widthConstraint, heightConstraint]) 

NSLayoutAnchor在iOS 9中是新的,它大大地清理了约束语法。

 let codedLabel:UILabel = UILabel() codedLabel.frame = CGRect(x: 100, y: 100, width: 200, height: 200) codedLabel.textAlignment = .center codedLabel.text = alertText codedLabel.numberOfLines=1 codedLabel.textColor=UIColor.red codedLabel.font=UIFont.systemFont(ofSize: 22) codedLabel.backgroundColor=UIColor.lightGray self.contentView.addSubview(codedLabel) codedLabel.translatesAutoresizingMaskIntoConstraints = false codedLabel.heightAnchor.constraint(equalToConstant: 200).isActive = true codedLabel.widthAnchor.constraint(equalToConstant: 200).isActive = true codedLabel.centerXAnchor.constraint(equalTo: codedLabel.superview!.centerXAnchor).isActive = true codedLabel.centerYAnchor.constraint(equalTo: codedLabel.superview!.centerYAnchor).isActive = true 
 let myLabel: UILabel = { let lb = UILabel() lb.translatesAutoresizingMaskIntoConstraints = false lb.textAlignment = .center lb.numberOfLines = 1 lb.textColor = UIColor.black lb.font=UIFont.systemFont(ofSize: 22) lb.backgroundColor = UIColor.grey return lb }() 

super.viewDidLoad()方法中,您需要将标签添加到视图中,并为标签添加约束条件:

 override func viewDidLoad() { super.viewDidLoad() self.view.addSubView(myLabel) setUpMyLabel() } func setUpMyLabel() { NSLayoutConstraint.activate([ myLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor), myLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor), myLabel.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 0.7), myLabel.heightAnchor.constraint(equalToConstant: 50)]) } 

我希望我的代码可以帮助你。

Interesting Posts