Как установить пользовательские высоты для упорядоченных подпредставлений в UIStackView? - PullRequest
0 голосов
/ 13 июня 2019

У меня есть горизонтальная UIStackView с некоторыми упорядоченными подпредставлениями, высота которых должна быть меньше высоты StackView, но центрирована вдоль оси y StackView. Однако даже после установки ограничений для подпредставлений их высота не изменяется и равна высоте StackView.

Помимо установки ограничений, определяющих высоту подпредставлений и задающих их ось Y для оси UIStackView, я установил выравнивание StackView по центру, а его распределение - «пропорциональное заполнение» - все это было рекомендовано в ответах на похожие вопросы, но ни один из них не меняет высоту подпредставлений.

Я также попытался установить directionalLayoutMargins в StackView, для которого верхнее и нижнее поля установлены (высота StackView - высота упорядоченных подпредставлений) / 2, и все, что это делает, - это сдвигать подпредставления намного ниже Центральная ось y StackView и, если я установлю нижнее поле на 0, раздавим подпредставления.

Вот мои ограничения:

button.widthAnchor.constraint(equalToConstant: width),
button.heightAnchor.constraint(equalToConstant: 32),
button.centerYAnchor.constraint(equalTo: contentView.stackView.centerYAnchor)

1 Ответ

0 голосов
/ 14 июня 2019

Несколько вещей:

Во-первых, убедитесь, что вы установили:

button.translatesAutoresizingMaskIntoConstraints = false

Кроме того, убедитесь, что ваши ограничения активны, вот так (это может уже иметь место, но толькообязательно):

button.widthAnchor.constraint(equalToConstant: width).isActive = true
button.heightAnchor.constraint(equalToConstant: 32.0).isActive = true
button.centerYAnchor.constraint(equalTo: contentView.stackView.centerYAnchor).isActive = true

Наконец, самый важный момент: stackView.alignment = fill является значением по умолчанию.Alignment - это площадь, которую arrangedViews занимает на перпендикулярной оси (в случае horizontal, fill займет всю высоту).

Чтобы он был отцентрирован навместо перпендикулярной оси используйте:

stackView.alignment = center
...