Вертикальный центр Три UILabels внутри UIStackView - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть три UILabels внутри UIStackView.У одного из них есть многострочный (последний), а у других только одна строка.Я хочу, чтобы они были центрированы внутри UIStackView, чтобы верхние и нижние пространства могли быть динамическими.Что я делаю неправильно?

headingLabel.translatesAutoresizingMaskIntoConstraints = false
headingLabel.textAlignment = .center
subHeadingLabel.translatesAutoresizingMaskIntoConstraints = false
subHeadingLabel.textAlignment = .center
subHeadingLabel.numberOfLines = 0
bodyLabel.translatesAutoresizingMaskIntoConstraints = false
bodyLabel.textAlignment = .center
bodyLabel.numberOfLines = 0
bodyLabel.text = "My very very long text \n to make it multiline"
textStackView.axis = .vertical
textStackView.distribution = .fillProportionally
textStackView.alignment = .center
textStackView.translatesAutoresizingMaskIntoConstraints = false

textStackView.addArrangedSubview(headingLabel)
textStackView.addArrangedSubview(subHeadingLabel)
textStackView.addArrangedSubview(bodyLabel)

Как это видно сейчас:

enter image description here

Как и должно быть:

enter image description here

РЕДАКТИРОВАТЬ: Я также пытаюсь сделать с fillEqually, но это ничего не меняет.Я также установил верхний и нижний якоря UIStackView.Здесь я хочу добиться того, чтобы, например, UIStackView имел высоту 100, а все три метки имели высоту 40. Эти 60 дополнительных мест должны быть равномерно распределены, как 30 - 30 сверху и снизу.

Ограничения UIStackView

myStackView.anchor(contentImageView.bottomAnchor, left: self.view.leftAnchor, bottom: self.view.bottomAnchor, right: self.view.rightAnchor, topConstant: 0, leftConstant: 0, bottomConstant: 0, rightConstant: 0, widthConstant: 0, heightConstant: 0)

Одно решение: Я решаю это, помещая UIStackView в UIView и не давая высотуUIStackView.Просто центр X и Y якоря.Это решит мою проблему, но я не уверен, что это правильное решение.

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Убедитесь, что нижнее ограничение UIStackView должно быть больше нуля с точки зрения UIViewController.Таким образом, высота UIStackView будет увеличена в зависимости от содержимого внутри.

Попробуйте это.

let myStackView = UIStackView()
view.addSubview(myStackView)
myStackView.translatesAutoresizingMaskIntoConstraints = false
myStackView.topAnchor.constraint(greaterThanOrEqualTo: view.topAnchor, constant: 0.0).isActive = true
myStackView.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 0.0).isActive = true
myStackView.rightAnchor.constraint(equalTo: view.rightAnchor, constant: 0.0).isActive = true
myStackView.bottomAnchor.constraint(greaterThanOrEqualTo: view.bottomAnchor, constant: 0.0).isActive = true
myStackView.centerXAnchor.constraint(equalTo: view.centerXAnchor, constant: 0.0).isActive = true
myStackView.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant: 0.0).isActive = true

enter image description here

0 голосов
/ 05 декабря 2018

Здесь я хочу добиться того, чтобы, например, UIStackView имел высоту 100, а все три метки имели высоту 40. Эти 60 дополнительных мест должны быть равномерно распределены, как 30 - 30 сверху и снизу.

Это не то, как работает представление стека.Если вам нужны три метки с высотой 40 по центру, просто сделайте это без необходимости просмотра в стеке.Или установите высоту просмотра стека до 40 и отцентрируйте его.

...