ios 菜鸟之 UIStackView 学习代码记录

120 阅读1分钟
//
//  ViewController.swift
//  疯狂ios
//
//  Created by gy on 2023/1/8.
//

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: "changeOri:", for:UIControl.Event.valueChanged)
        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]
    }
}


加油.png