0

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

1
  • your code won't compile for re-produce as of custom views check below how it's be done Commented Jun 23, 2019 at 16:47

1 Answer 1

2

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)
        } 
    } 
}

enter image description here

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)
        }
    } 
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.