во вложенном UIStackView, когда я добавляю более одного упорядоченного подпредставления, это нарушает компоновку, почему? - PullRequest
0 голосов
/ 04 июня 2019

Играя с UIStackView Я столкнулся со странной проблемой, которая не позволяет мне добавить дополнительное упорядоченное подпредставление во вложенном UIStackView:

 override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .white

        let subViews = [UIColor.gray, UIColor.darkGray, UIColor.lightGray].map { (color) -> UIView in
            let v = UIView()
            v.backgroundColor = color
            return v
        }

        let redView = UIStackView(arrangedSubviews: subViews)
        redView.distribution = .fillEqually
        redView.heightAnchor.constraint(lessThanOrEqualToConstant: 100).isActive = true


        let blueView = UIView()
        blueView.backgroundColor = .blue


        let buttons = [UIColor.gray, UIColor.darkGray, UIColor.lightGray].map { (color) -> UIView in
            let v = UIView()
            v.backgroundColor = color
            return v
        }

        let buttonsView = UIStackView(arrangedSubviews: buttons)
        buttonsView.distribution = .fillEqually
        buttonsView.heightAnchor.constraint(lessThanOrEqualToConstant: 100).isActive = true


        let stackView = UIStackView(arrangedSubviews: [redView, blueView, buttonsView])

        view.addSubview(stackView)
        stackView.axis = .vertical
        stackView.fillSuperview()

    }

В результате я получаю полностью растянутый синий вид вместо ожидаемого поведения:

enter image description here

Но когда я оставляю ОДНО подпредставление в представлении нижнего стека - оно выглядит как ожидалось

   let buttons = [UIColor.gray].map { (color) -> UIView in
        let v = UIView()
        v.backgroundColor = color
        return v
    }

    let buttonsView = UIStackView(arrangedSubviews: buttons)
    buttonsView.distribution = .fillEqually
    buttonsView.heightAnchor.constraint(lessThanOrEqualToConstant: 100).isActive = true


    let stackView = UIStackView(arrangedSubviews: [redView, blueView, buttonsView])

enter image description here

почему? Что не так с кодом? Любая помощь или подсказка приветствуется, я пробовал translatesAutoresizingMaskIntoConstraints = false на верхнем и нижнем стеках, но без какой-либо удачи

1 Ответ

1 голос
/ 04 июня 2019

на нижнем стеке необходимо было установить buttonView.heightAnchor.constraint(equalToConstant: 100).isActive = true

вместо

buttonView.heightAnchor.constraint(lessThanOrEqualToConstant: 100).isActive = true

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...