Swift 3 Create a UILabel programmatically and add NSLayoutConstraints

Hello, I am trying to create a label programmatically and add NSLayoutConstraints so that it is concentrated in supervision regardless of the size and orientation of the screen, etc. I watched, but just can’t find a role model. Here is what I have:

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) 
+6
source share
3 answers

Below is a sample code

 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]) 
+8
source

NSLayoutAnchor was new in iOS 9, and it greatly cleans up the syntax of constraints.

 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 
+18
source
 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 }() 

In the super.viewDidLoad() method, you need to add a shortcut to your view and add restrictions to the label:

 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)]) } 

I hope my code helps you.

+2
source

Source: https://habr.com/ru/post/1011797/


All Articles