Ограничения размера (ширины / высоты) для элементов diff в UIStackView переопределяют ограничения друг друга - PullRequest
0 голосов
/ 17 июня 2020

В настоящее время я размещаю UIImageView с фиксированной шириной и высотой 20 и UIView под этим UIImageView. Но UIView имеет ширину 20, такую ​​же, как UIImageView, но когда я добавляю ограничение ширины 10 к UIView, UIImageView становится 10x10 ... Ниже моя реализация: -

        guard let superview = superview else { return }
        verticalStack = UIStackView()

        verticalStack?.translatesAutoresizingMaskIntoConstraints = false
        verticalStack?.isLayoutMarginsRelativeArrangement = true
        verticalStack?.axis = .vertical
        verticalStack?.backgroundColor = UIColor.green
        verticalStack?.spacing = 5.0

        brightnessIcon = UIImageView(image: UIImage(named: "brightness.png"))
        brightnessIcon?.contentMode = .scaleAspectFit
        brightnessIcon?.widthAnchor.constraint(equalToConstant: 20.0).isActive = true
        brightnessIcon?.heightAnchor.constraint(equalToConstant: 20.0).isActive = true
        verticalStack?.addArrangedSubview(brightnessIcon!)

        brightnessIndicator = UIView()
        brightnessIndicator?.backgroundColor = UIColor.red
        brightnessIndicator?.widthAnchor.constraint(equalToConstant: 5.0).isActive = true
        verticalStack?.addArrangedSubview(brightnessIndicator!)

Ниже приведен изображение, прежде чем я добавлю ограничение ширины к яркостиIndicator (UIView): -

enter image description here

После добавления ограничения ширины к яркостиIndicator: -

enter image description here

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

Вам необходимо установить распределение и выравнивание вашего stackView

        verticalStack?.translatesAutoresizingMaskIntoConstraints = false
        verticalStack?.isLayoutMarginsRelativeArrangement = true
        verticalStack?.axis = .vertical
        verticalStack?.alignment = .center
        verticalStack?.distribution = .fillProportionally
0 голосов
/ 17 июня 2020

Вы должны изменить alignment вашего stackView. По умолчанию для него установлено значение fill, которое пытается расположить упорядоченные подпредставления для заполнения противоположной оси вашего stackView (в вашем случае они будут заполнены horizontally).

Попробуйте установить выравнивание на leading, trailing или centered (вы должны сами проверить, что вам подходит). Поскольку эти параметры выравнивания не заставляют изменять размер упорядоченных подпредставлений.

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