import UIKit import PlaygroundSupport let stackView = UIStackView() stackView.distribution = .equalSpacing stackView.alignment = .center stackView.translatesAutoresizingMaskIntoConstraints = false let bg = UIView(frame: CGRect(x: 0, y: 0, width: 500, height: 500)) bg.backgroundColor = .lightGray let wrapper = UIView() wrapper.layer.borderColor = UIColor.black.cgColor wrapper.layer.borderWidth = 2 bg.addSubview(wrapper) wrapper.translatesAutoresizingMaskIntoConstraints = false wrapper.centerXAnchor.constraint(equalTo: bg.centerXAnchor).isActive = true wrapper.centerYAnchor.constraint(equalTo: bg.centerYAnchor).isActive = true wrapper.addSubview(stackView) wrapper.leadingAnchor.constraint(equalTo: stackView.leadingAnchor).isActive = true wrapper.trailingAnchor.constraint(equalTo: stackView.trailingAnchor).isActive = true wrapper.topAnchor.constraint(equalTo: stackView.topAnchor).isActive = true wrapper.bottomAnchor.constraint(equalTo: stackView.bottomAnchor).isActive = true let viewgen = { (name: String, width: CGFloat, height: CGFloat, backgroundColor: UIColor) -> UIView in let view = UIView() view.backgroundColor = backgroundColor view.translatesAutoresizingMaskIntoConstraints = false view.widthAnchor.constraint(equalToConstant: width).isActive = true view.heightAnchor.constraint(equalToConstant: height).isActive = true let label = UILabel() label.text = name label.textColor = .white view.addSubview(label) label.translatesAutoresizingMaskIntoConstraints = false label.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true label.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true return view } stackView.addArrangedSubview(viewgen("v1", 50, 100, .red)) stackView.addArrangedSubview(viewgen("v2", 100, 50, .green)) PlaygroundPage.current.liveView = bg