以自适应高度为例
要求subviews 左对齐,宽度自定义,高度适应内容,如图:

let stack =UIStackView(frame: .zero)
stack.translatesAutoresizingMaskIntoConstraints = false
stack.axis= .vertical
stack.alignment= .leading
stack.distribution= .fill;
stack.spacing=10;
self.view.addSubview(stack);
var cons0 = [NSLayoutConstraint]()
let views0 = ["view": stack]
cons0+=NSLayoutConstraint.constraints(withVisualFormat:"H:|-10-[view]-10-|", options: [], metrics:nil, views: views0)
cons0+=NSLayoutConstraint.constraints(withVisualFormat:"V:|-110-[view]", options: [], metrics:nil, views: views0)
NSLayoutConstraint.activate(cons0)
let view1 = UIView(frame: .zero)
view1.translatesAutoresizingMaskIntoConstraints = false;
view1.backgroundColor = UIColor.red;
stack.addArrangedSubview(view1)
let view2 =UIView(frame: .zero)
view2.translatesAutoresizingMaskIntoConstraints = false;
view2.backgroundColor = UIColor.green;
stack.addArrangedSubview(view2)
let view3 =UIView(frame: .zero)
view3.translatesAutoresizingMaskIntoConstraints = false;
view3.backgroundColor = UIColor.blue;
stack.addArrangedSubview(view3)
//设置宽高
var cons = [NSLayoutConstraint]()
let views = ["view1": view1,"view2": view2,"view3": view3]
cons+=NSLayoutConstraint.constraints(withVisualFormat:"H:[view1(==80)]", options: [], metrics:nil, views: views)
cons+=NSLayoutConstraint.constraints(withVisualFormat:"H:[view2(==180)]", options: [], metrics:nil, views: views)
cons+=NSLayoutConstraint.constraints(withVisualFormat:"H:[view3(==120)]", options: [], metrics:nil, views: views)
//以下因为UIView默认的intrinsicContentSize为0,0所以要设置高度。
//若自定义View,可自行实现intrinsicContentSize,则不需要设置以下的高度约束
cons += NSLayoutConstraint.constraints(withVisualFormat: "V:[view1(==30)]", options: [], metrics: nil, views: views)
cons += NSLayoutConstraint.constraints(withVisualFormat: "V:[view2(==60)]", options: [], metrics: nil, views: views)
cons += NSLayoutConstraint.constraints(withVisualFormat: "V:[view3(==90)]", options: [], metrics: nil, views: views)
NSLayoutConstraint.activate(cons)
网友评论