Скрытие представления внутри стека все еще сохраняет ограничения активными - PullRequest
0 голосов
/ 19 мая 2019

Этот код можно скопировать и вставить во вновь созданный проект:

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let label = createLabel()
        let imageView = createImageView()
        let stackView = UIStackView(arrangedSubviews: [imageView, label])

        stackView.axis = .vertical
        stackView.spacing = 5

        view.addSubview(stackView)
        stackView.translatesAutoresizingMaskIntoConstraints = false
        stackView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        stackView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true

        Timer.scheduledTimer(withTimeInterval: 1, repeats: false) { (_) in
            imageView.isHidden = true
        }
    }

    func createLabel() -> UILabel {
        let label = UILabel(frame: .zero)

        label.text = "Some Text"
        label.setContentHuggingPriority(.required, for: .horizontal)
        label.setContentHuggingPriority(.required, for: .vertical)
        label.backgroundColor = .green

        return label
    }

    func createImageView() -> UIImageView {
        let imageView = UIImageView()

        imageView.backgroundColor = .red
        imageView.heightAnchor.constraint(equalToConstant: 200).isActive = true
        imageView.heightAnchor.constraint(equalTo: imageView.widthAnchor).isActive = true

        return imageView
    }
}

Это UILabel и UIImageView внутри UIStackView.Когда я скрываю UIImageView, я вижу, что UIStackView правильно адаптируется к высоте UILabel's.Однако UIStackView не адаптируется к ширине UILabel.

Как я могу сделать так, чтобы UIStackView изменил размеры, чтобы это были только видимые виды / UILabel?Я установил ограничение на переменную для якорной константы высоты UIImageView и отключил ее, когда скрывал UIImageView, но затем UILabel исчезает по какой-то странной причине.

Ответы [ 2 ]

1 голос
/ 19 мая 2019

Добавление стека выравнивание

Это свойство определяет, как стековое представление раскладывает взгляды перпендикулярно его оси. Значением по умолчанию является UIStackView.Alignment.fill.

stackView.alignment = .leading

Stackview изменяет свой размер только до видимой UILabel

enter image description here

0 голосов
/ 19 мая 2019

Попробуйте изменить Распределение на Fill Equally в Инспекторе атрибутов UIStackView, а с Alignment на Fill или center, как вам нравится.

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