添加多个UIView的indie一个UIView。

问题描述 投票:0回答:1

enter image description here

我需要创建一个有3个标签的视图,左、中、右。并将这个视图以编程方式放置在我的StoryBoard内的UIView内。每次添加这个视图时,标签都会被重复使用。

我正在使用storyboard进行我的应用设计,但需要以编程的方式来完成,因为我可能要使用这个视图1到10次,在每个页面上垂直堆叠,有10个页面。因此,要创建100个视图,有300个级别,并与隐藏显示它们的工作将需要永远。

最好的方法是什么?我想过使用tableView,但在创建一个只有1到10个单元格的小表格时遇到了问题,而且不需要滚动,并将其包含在该视图中。

swift xcode uitableview uiview storyboard
1个回答
1
投票

看起来堆栈视图可以满足你管理标签的需求。用@IBDesignable创建一个StackWithLabels类型,以便能够以编程方式或从Storyboard添加堆栈视图。

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let stackWithLabels = StackWithLabels(frame: .init(origin: .zero, size: UIScreen.main.bounds.size))
        stackWithLabels.distribution = .fillEqually

        view.addSubview(stackWithLabels)
    }
}

@IBDesignable
class StackWithLabels: UIStackView {

    override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
    }

    required init(coder: NSCoder) {
        super.init(coder: coder)
        commonInit()
    }

    private func commonInit() {
        let label1 = UILabel(); label1.text = "Label 1"
        let label2 = UILabel(); label2.text = "Label 2"
        let label3 = UILabel(); label3.text = "Label 3"

        addArrangedSubview(label1)
        addArrangedSubview(label2)
        addArrangedSubview(label3)
        arrangedSubviews.forEach { ($0 as? UILabel)?.textAlignment = .center }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.