Как автоматически изменить ширину вертикального UIStackView, когда один из видов скрыт? - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть вертикальный UIStackView (S1) с UIView (V1) и UILabel (L1). UIView содержит горизонтальный StackView (S2) с ImageView и вертикальный StackViews (S3) для отображения метки один под другим.

Теперь, когда я скрываю вид сверху, т. Е. V1, моя метка заняла всю высоту, что и ожидалось. Но я хочу, чтобы представление стека сжималось, чтобы показывать только содержимое Label (L1). Но в моем случае это не уменьшение ширины.

Вот мои ViewTree и Снимки при запуске и когда V1 скрыт.

ViewTree/ViewLayout

1 Ответ

1 голос
/ 12 февраля 2020

Когда вы устанавливаете .isHidden = true для упорядоченного подпредставления представления стека, представление стека удаляет занимаемое им пространство ... но только в направлении .axis.

Таким образом, ваше представление стека остается выделяет ширину Top PINK View.

Чтобы удалить высоту и ширину Top PINK View, вам необходимо удалить ее из представления стека. не просто скрыть это.

Попробуйте это так - при нажатии на кнопку вы переключитесь между скрытым и показом:

@IBOutlet var mainStackView: UIStackView!

@IBAction func showHide(_ sender: Any) {
    if !topPINKView.isHidden {
        topPINKView.isHidden = true
        topPINKView.removeFromSuperview()
    } else {
        mainStackView.insertArrangedSubview(topPINKView, at: 0)
        topPINKView.isHidden = false
    }
}

Примечание: обязательно подключите ваш стек в @IBOutlet var mainStackView: UIStackView!


Редактировать

Вы можете даже уменьшить это значение до:

@IBAction func showHide(_ sender: Any) {
    if topPINKView.superview != nil {
        topPINKView.removeFromSuperview()
    } else {
        mainStackView.insertArrangedSubview(topPINKView, at: 0)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...