Ширина и высота UIStackView не меняются при добавлении следующих элементов - PullRequest
0 голосов
/ 03 июня 2018

Контекст

Я пытаюсь создать UIStackView программно, но он вообще не отображается.

Для тестирования я создал 2 маленьких UIView, которые добавляю в UIStackView.

Я пытался

  • Добавление ограничений на UIStackView
  • Использование layoutIfNeeded
  • Использование layoutSubviews

Но ничего не работает.

Код

import UIKit

class ViewController: UIViewController {
    var contentStack = UIStackView()

    @IBOutlet weak var mainScroll: UIScrollView!

    override func viewDidLoad() {
        super.viewDidLoad()

        contentStack.backgroundColor = #colorLiteral(red: 0.05882352963, green: 0.180392161, blue: 0.2470588237, alpha: 1)
        contentStack.axis = .vertical
        contentStack.spacing = 0
        contentStack.alignment = .top
        contentStack.distribution = .equalSpacing

        let a_view = UIView(frame: CGRect(x: 0, y: 0, width: 20, height: 30))
        a_view.backgroundColor = #colorLiteral(red: 0.4666666687, green: 0.7647058964, blue: 0.2666666806, alpha: 1)
        contentStack.addArrangedSubview(a_view)

        let b_view = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 40))
        b_view.backgroundColor = #colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)
        contentStack.addArrangedSubview(b_view)

        mainScroll.addSubview(contentStack)
        contentStack.topAnchor.constraint(equalTo: mainScroll.topAnchor).isActive = true
        contentStack.leftAnchor.constraint(equalTo: mainScroll.leftAnchor).isActive = true
        contentStack.bottomAnchor.constraint(equalTo: mainScroll.bottomAnchor).isActive = true
        contentStack.rightAnchor.constraint(equalTo: mainScroll.rightAnchor).isActive = true
        mainScroll.contentSize = CGSize(width: self.view.frame.width, height: contentStack.frame.height)

        print("Stack Content Size: (\(contentStack.frame.width), \(contentStack.frame.height))");
    }
}

Выход

Output

Вопрос

После прочтения документации, я предполагаю, что высота и ширина UIStackView адаптируются в соответствии с элементами, содержащими размер представления стека после добавления представления, это Stack Content Size: (0.0, 0.0)?

1 Ответ

0 голосов
/ 03 июня 2018

Попробуйте установить ограничения для a_view и b_view, как показано ниже

let a_view = UIView()
a_view.translatesAutoresizingMaskIntoConstraints = false
a_view.heightAnchor.constraint(equalToConstant: 30).isActive = true
a_view.widthAnchor.constraint(equalToConstant: 30).isActive = true

В представлениях стека используется собственный размер содержимого, поэтому используйте ограничения макета для определения размеров представлений.

Если этоне работает тогда, я подозреваю, что могут быть некоторые проблемы с ограничениями scrollview.

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