import UIKit
class ViewController: UIViewController {
var stackView : UIStackView!
override func viewDidLoad() {
super.viewDidLoad()
let size = self.view.bounds.size
let oriCtl = UISwitch(frame: CGRect.init(x: 10, y: 20, width: 51, height: 31))
self.view.addSubview(oriCtl)
oriCtl.addTarget(self, action: #selector(changeOri(sender:)), for: UIControl.Event.valueChanged)
let spaceCtrl = UISlider.init(frame: CGRect.init(x: 70, y: 20, width: size.width - 80, height: 31))
spaceCtrl.maximumValue = 100
self.view.addSubview(spaceCtrl)
spaceCtrl.addTarget(self, action: #selector(changeSpace(sender:)), for: UIControl.Event.valueChanged)
let alignArr = ["Fill","Top","Center","Bottom","FirstBaseline","LastBaseline"]
let alignCtrl = UISegmentedControl.init(items: alignArr)
alignCtrl.frame = CGRect.init(x: 0, y: 60, width: size.width, height: 29)
self.view.addSubview(alignCtrl)
alignCtrl.addTarget(self, action: #selector(changeAlign(sender:)), for: UIControl.Event.valueChanged)
stackView = UIStackView(frame: CGRect.init(x: 5, y: 140, width: size.width-10, height: size.width-10))
self.view.addSubview(stackView)
let label1 = UILabel()
label1.text = "1"
let label2 = UILabel()
label2.text = "2"
label2.textAlignment = .center
let label3 = UILabel()
label3.text = "3"
let label4 = UILabel()
label4.text = "4"
let label5 = UILabel()
label5.text = "5"
stackView.addArrangedSubview(label1)
stackView.addArrangedSubview(label2)
stackView.addArrangedSubview(label3)
stackView.addArrangedSubview(label4)
stackView.addArrangedSubview(label5)
stackView.arrangedSubviews[0].backgroundColor = .yellow
stackView.arrangedSubviews[1].backgroundColor = .red
stackView.arrangedSubviews[2].backgroundColor = .gray
stackView.arrangedSubviews[3].backgroundColor = .green
stackView.arrangedSubviews[4].backgroundColor = .blue
var index0 = 0
stackView.arrangedSubviews[index0].setContentHuggingPriority(.defaultHigh, for: .horizontal)
stackView.arrangedSubviews[index0].setContentHuggingPriority(.defaultHigh, for: .vertical)
stackView.arrangedSubviews[index0].setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
stackView.arrangedSubviews[index0].setContentCompressionResistancePriority(.defaultHigh, for: .vertical)
var index1 = 1
stackView.arrangedSubviews[index1].setContentHuggingPriority(.defaultLow, for: .horizontal)
stackView.arrangedSubviews[index1].setContentHuggingPriority(.defaultLow, for: .vertical)
stackView.arrangedSubviews[index1].setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
stackView.arrangedSubviews[index1].setContentCompressionResistancePriority(.defaultHigh, for: .vertical)
var inde2 = 2
stackView.arrangedSubviews[inde2].setContentHuggingPriority(.defaultHigh, for: .horizontal)
stackView.arrangedSubviews[inde2].setContentHuggingPriority(.defaultHigh, for: .vertical)
stackView.arrangedSubviews[inde2].setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
stackView.arrangedSubviews[inde2].setContentCompressionResistancePriority(.defaultHigh, for: .vertical)
var index3 = 3
stackView.arrangedSubviews[index3].setContentHuggingPriority(.defaultHigh, for: .horizontal)
stackView.arrangedSubviews[index3].setContentHuggingPriority(.defaultHigh, for: .vertical)
stackView.arrangedSubviews[index3].setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
stackView.arrangedSubviews[index3].setContentCompressionResistancePriority(.defaultHigh, for: .vertical)
var index4 = 4
stackView.arrangedSubviews[index4].setContentHuggingPriority(.defaultHigh, for: .horizontal)
stackView.arrangedSubviews[index4].setContentHuggingPriority(.defaultHigh, for: .vertical)
stackView.arrangedSubviews[index4].setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
stackView.arrangedSubviews[index4].setContentCompressionResistancePriority(.defaultHigh, for: .vertical)
stackView.distribution = .equalCentering
}
@objc
func changeOri(sender:UISwitch){
stackView.axis = sender.isOn ? NSLayoutConstraint.Axis.vertical : NSLayoutConstraint.Axis.horizontal
}
@objc
func changeSpace(sender:UISlider){
stackView.spacing = CGFloat(sender.value)
}
@objc
func changeAlign(sender:UISegmentedControl){
let alignArray : [UIStackView.Alignment] = [.fill,.top,.center,.bottom,.firstBaseline,.lastBaseline]
stackView.alignment = alignArray[sender.selectedSegmentIndex]
}
}
