简体   繁体   中英

creating UI components based on array values swift

I have an array of string and for each string value, I want to create a UILabel to display the text that means if I have 10 stings in the array, i want to have 10 labels with the string name. I am doing this programmaticalyy but since, it does not work and nothing is shown. This is what I have tried

let const: [String] = ["Central Cooling Unit", "Split Cooling Unit", "Oven", "Refridgerator", "Dish Washer"]

var checkBox: BEMCheckBox!
var checkLabel: DefaultLabel!
var checkboxStack: DefaultStackView?

fileprivate func setupButton() {
        const.forEach { (title) in
            checkBox = BEMCheckBox()
            checkBox.translatesAutoresizingMaskIntoConstraints = false
            checkBox.tintColor = UIColor.ZAMA.offWhite
            checkBox.onCheckColor = UIColor.ZAMA.primary
            checkBox.onFillColor = UIColor.ZAMA.tabColor
            checkBox.onTintColor = UIColor.ZAMA.primary
            checkBox.onAnimationType = .flat
            checkBox.heightAnchor.constraint(equalToConstant: 25).isActive = true
            checkBox.widthAnchor.constraint(equalToConstant: 25).isActive = true

            checkLabel = UILabel()
            checkLabel.text = title
            checkLabel.textColor = .black
            checkLabel.fontSize = 15

            checkboxStack = UIStackView(arrangedSubviews: [centralCoolingCheckbox, centralCoolingText])
            checkboxStack?.axis = .horizontal
            checkboxStack?.spacing =  4
            checkboxStack?.alignment = .fill
            checkboxStack?.distribution = .fill
        }
    }

fileprivate func layout() {
        view.addSubview(scrollView)
        hideKeyboardWhenTappedAround()
        setupButton()
        stack = UIStackView(arrangedSubviews: [checkboxStack ?? DefaultStackView()])
        stack.axis = .vertical
        stack.distribution = .fillEqually
        stack.spacing = 8

        view.addSubview(stack)

        stack.anchor(top: contentView.topAnchor, left: contentView.leftAnchor, bottom: nil, right: contentView.rightAnchor, paddingTop: 4, paddingLeft: 8, paddingBottom: 0, paddingRight: 8, width: 0, height: 0, enableInsets: false)
    }

layout() is then called in viewDidLoad

You can try like

Without ScrollView

class ViewController: UIViewController {

    let const  = ["Central Cooling Unit", "Split Cooling Unit", "Oven", "Refridgerator", "Dish Washer","Central Cooling Unit", "Split Cooling Unit", "Oven", "Refridgerator", "Dish Washer","Central Cooling Unit", "Split Cooling Unit", "Oven", "Refridgerator", "Dish Washer"]

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        let st = UIStackView()
        st.axis = .vertical
        st.alignment = .center
        st.translatesAutoresizingMaskIntoConstraints  = false
        view.addSubview(st)
        NSLayoutConstraint.activate([
            st.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
            st.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
            st.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor)
        ])

        const.forEach {
            let lbl = UILabel()
            lbl.text = $0
            st.addArrangedSubview(lbl)
        } 
    } 
}

在此处输入图片说明

With ScrollView

class ViewController: UIViewController {

    let const = ["Central Cooling Unit", "Split Cooling Unit", "Oven", "Refridgerator", "Dish Washer","Central Cooling Unit", "Split Cooling Unit", "Oven", "Refridgerator", "Dish Washer","Central Cooling Unit", "Split Cooling Unit", "Oven", "Refridgerator", "Dish Washer","Central Cooling Unit", "Split Cooling Unit", "Oven", "Refridgerator", "Dish Washer","Central Cooling Unit", "Split Cooling Unit", "Oven", "Refridgerator", "Dish Washer","Central Cooling Unit", "Split Cooling Unit", "Oven", "Refridgerator", "Dish Washer","Central Cooling Unit", "Split Cooling Unit", "Oven", "Refridgerator", "Dish Washer","Central Cooling Unit", "Split Cooling Unit", "Oven", "Refridgerator", "Dish Washer","Central Cooling Unit", "Split Cooling Unit", "Oven", "Refridgerator", "Dish Washer","Central Cooling Unit", "Split Cooling Unit", "Oven", "Refridgerator", "Dish Washer","Central Cooling Unit", "Split Cooling Unit", "Oven", "Refridgerator", "Dish Washer","Central Cooling Unit", "Split Cooling Unit", "Oven", "Refridgerator", "Dish Washer"]

    let scroll = UIScrollView()
    let st = UIStackView()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        st.axis = .vertical
        st.alignment = .center
        scroll.translatesAutoresizingMaskIntoConstraints  = false
        st.translatesAutoresizingMaskIntoConstraints  = false
        view.addSubview(scroll)
        scroll.addSubview(st)
        NSLayoutConstraint.activate([
            scroll.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
            scroll.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
            scroll.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor),
            scroll.bottomAnchor.constraint(equalTo: self.view.bottomAnchor),

            st.widthAnchor.constraint(equalTo: self.view.widthAnchor),
            st.leadingAnchor.constraint(equalTo: self.scroll.leadingAnchor),
            st.trailingAnchor.constraint(equalTo: self.scroll.trailingAnchor),
            st.topAnchor.constraint(equalTo: self.scroll.topAnchor),
            st.bottomAnchor.constraint(equalTo: self.scroll.bottomAnchor)
        ])
        const.forEach {
            let lbl = UILabel()
            lbl.text = $0
            st.addArrangedSubview(lbl)
        }
    } 
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM