首页 > 解决方案 > 无法弄清楚为什么我的堆栈视图没有垂直排列

问题描述

我已经这样做了很多次,但这次由于某种原因不会像往常那样工作。我在这里做错了吗?我只是想将两个视图放入我的 UIstackView 并垂直分布它们。它似乎不断重叠并遍布整个地方。在某一时刻,它甚至只显示一种视图。

我的 viewdidload():

override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .red
        view.addSubview(headerView)
        view.addSubview(contentView)
        contentView.addSubview(contentStack)


        headerView.heightAnchor.constraint(equalTo: self.view.heightAnchor, multiplier: 0.30).isActive = true
        headerView.widthAnchor.constraint(equalTo: self.view.widthAnchor).isActive = true
        headerView.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true
        headerView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true

        contentView.heightAnchor.constraint(equalTo: self.view.heightAnchor, multiplier: 0.70).isActive = true
        contentView.widthAnchor.constraint(equalTo: self.view.widthAnchor,multiplier: 0.90).isActive = true
        contentView.topAnchor.constraint(equalTo: headerView.bottomAnchor,constant: 20).isActive = true
        contentView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true



    }

我的观点和标签:

fileprivate lazy var headerView : UIView = {

        var view = UIView()
        view.translatesAutoresizingMaskIntoConstraints = false
        view.backgroundColor = .black
        return view

        }()
    fileprivate lazy var contentView : UIView = {

        var view = UIView()
        view.backgroundColor = .lightGray
        view.translatesAutoresizingMaskIntoConstraints = false

        return view

    }()

    fileprivate lazy var contentStack : UIStackView = {



        var stack = UIStackView(arrangedSubviews: [EarningsView,ListingsView,])

        stack.translatesAutoresizingMaskIntoConstraints = true
        stack.distribution = .fillEqually
        stack.alignment = .fill
        stack.axis = .vertical
//        stack.spacing = 5

        return stack

    }()
    fileprivate lazy var EarningsView : UIView = {

        let EarningsView = UIView()
        EarningsView.translatesAutoresizingMaskIntoConstraints = false
        EarningsView.backgroundColor = .blue

         EarningsView.addSubview(EarningsLabel)
         EarningsView.addViewBorder(borderColor: UIColor.black.cgColor, borderWith: 0.5, borderCornerRadius: 0.0)

        return EarningsView

    }()
    fileprivate lazy var EarningsLabel : UILabel = {
        let EarningsLabel = UILabel()
        EarningsLabel.translatesAutoresizingMaskIntoConstraints = false
        let earningsText = NSAttributedString(string: "My Earnings", attributes: self.stringAttrib)
        EarningsLabel.attributedText = earningsText
        EarningsLabel.textColor = .black
        EarningsLabel.backgroundColor = .white
        EarningsLabel.textAlignment = .center


        return EarningsLabel

    }()

    fileprivate lazy var ListingsView : UIView = {

        let ListingsView = UIView()

        ListingsView.translatesAutoresizingMaskIntoConstraints = false

        ListingsView.addSubview(ListingLabel)
        ListingsView.addViewBorder(borderColor: UIColor.black.cgColor, borderWith: 0.5, borderCornerRadius: 0.0)
        ListingsView.backgroundColor = .red
        return ListingsView
    }()
    fileprivate lazy var ListingLabel : UILabel = {
        let ListingLabel = UILabel()
        ListingLabel.translatesAutoresizingMaskIntoConstraints = false

        let listingText = NSAttributedString(string: "My Listing", attributes: self.stringAttrib)
        ListingLabel.attributedText = listingText


        return ListingLabel
    }()

这让我发疯了,因为我以前做过很多次,现在我花了至少 6 个小时在这个小部分上试图弄清楚。当然,我可以创建一个全新的视图控制器,但我只是想弄清楚这一点。重叠截图

标签: swiftxcodemodel-view-controlleruikit

解决方案


EarningsView、EarningsLabel、ListingsView、ListingLabel 有

translatesAutoresizingMaskIntoConstraints = false

但是它们没有添加任何约束来替换 Autoresizing 约束,所以它们只是表现得愚蠢并上升到左上角。我以前见过这样的东西。在我的东西上。要么自动调整大小,要么加入约束。


推荐阅读