how to set size UIView in auto layout programmatically swift?
11,368
This will work:
let heightConstraint = NSLayoutConstraint(item: topView,
attribute: NSLayoutAttribute.Height,
relatedBy: NSLayoutRelation.Equal,
toItem: bottomView,
attribute: NSLayoutAttribute.Height,
multiplier: 0.33, constant: 0)
self.view.addConstraint(heightConstraint)
let widthConstraint = NSLayoutConstraint(item: topView,
attribute: NSLayoutAttribute.Width,
relatedBy: NSLayoutRelation.Equal,
toItem: bottomView,
attribute: NSLayoutAttribute.Width,
multiplier: 0.33, constant: 0)
self.view.addConstraint(widthConstraint)
Author by
black tiger
Updated on August 07, 2022Comments
-
black tiger over 1 year
I have made two
UIView
withAuto Layout
using this code :class ViewController: UIViewController { var view_constraint_V:NSArray = [NSLayoutConstraint](); var originalValue:CGFloat = 0.0; var offsetValue:CGFloat = -100; override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. var topView = UIView() topView.setTranslatesAutoresizingMaskIntoConstraints(false) topView.backgroundColor = UIColor.blackColor() var bottomView = UIView() bottomView.setTranslatesAutoresizingMaskIntoConstraints(false) bottomView.backgroundColor = UIColor.lightGrayColor() let button = UIButton() button.backgroundColor = UIColor.darkGrayColor() button.setTitle("Click me!", forState: UIControlState.Normal) button.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside) button.setTranslatesAutoresizingMaskIntoConstraints(false) self.view.addSubview(topView); self.view.addSubview(bottomView); bottomView.addSubview(button) // constraints let viewsDictionary = ["top":topView,"bottom":bottomView, "button":button] //position constraints let view_constraint_H:NSArray = NSLayoutConstraint.constraintsWithVisualFormat("H:|-10-[top]-10-|",options: NSLayoutFormatOptions(0),metrics: nil, views: viewsDictionary) let view_constraint_H2:NSArray = NSLayoutConstraint.constraintsWithVisualFormat("H:|-10-[bottom]-10-|",options: NSLayoutFormatOptions(0),metrics: nil, views: viewsDictionary) view_constraint_V = NSLayoutConstraint.constraintsWithVisualFormat("V:|-20-[top(bottom)]-[bottom]-10-|", options: NSLayoutFormatOptions.AlignAllLeading, metrics: nil, views: viewsDictionary) view.addConstraints(view_constraint_H) view.addConstraints(view_constraint_H2) view.addConstraints(view_constraint_V) originalValue = (view_constraint_V[1] as NSLayoutConstraint).constant; //println((view_constraint_V[1] as NSLayoutConstraint)) (view_constraint_V[1] as NSLayoutConstraint).constant = offsetValue // Position button let control_constraint_H:NSArray = NSLayoutConstraint.constraintsWithVisualFormat("H:|-30-[button]-30-|", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary) let control_constraint_V:NSArray = NSLayoutConstraint.constraintsWithVisualFormat("V:|-30-[button(50)]", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary) bottomView.addConstraints(control_constraint_H) bottomView.addConstraints(control_constraint_V) } /** Example of dynamically changing the constraints when clicking on a button. */ func buttonAction(sender:UIButton!) { if (view_constraint_V[1].constant == offsetValue) { (view_constraint_V[1] as NSLayoutConstraint).constant = originalValue } else { (view_constraint_V[1] as NSLayoutConstraint).constant = offsetValue } } }
Now, I want to set top view size equal to 1/3 of bottom view size programmatically but I don't know how to do this.