Сделайте один вид больше других внутри UIStackView () - PullRequest
0 голосов
/ 21 мая 2018

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

Как мне создать UIStackView ()

stackView.axis  = UILayoutConstraintAxis.horizontal
stackView.distribution = UIStackViewDistribution.fillEqually
stackView.alignment = UIStackViewAlignment.bottom
stackView.spacing = 0.0
stackView.addArrangedSubview(supportedServicesView)
stackView.addArrangedSubview(incidentView)
stackView.addArrangedSubview(contactUsView)
stackView.addArrangedSubview(moreView)
stackView.addArrangedSubview(moreView2)
stackView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(stackView)

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

Как я создаю свои собственные позиции подвидов UIViews;

override func updateConstraints() {
   logoImage.anchor(self.topAnchor, left: self.leftAnchor, bottom: nil, right: self.rightAnchor, topConstant: 0, leftConstant: 0, bottomConstant: 0, rightConstant: 0, widthConstant: 0, heightConstant: 0)
   label.anchor(self.logoImage.bottomAnchor, left: self.leftAnchor, bottom: nil, right: self.rightAnchor, topConstant: 10, leftConstant: 0, bottomConstant: 0, rightConstant: 0, widthConstant: 0, heightConstant: 0)
super.updateConstraints()

}

РЕДАКТИРОВАТЬ: когда я добавляю привязку ширины к центрированному виду, она становится больше ширины, но из-за того, что высота одинакова, она не выглядит больше.

contactUsView.widthAnchor.constraint(equalToConstant: self.view.frame.width / 5).isActive = true

РЕДАКТИРОВАТЬ 2: Когда я даю ограничение высоты для любого вида внутри UIStackView, положение Stackviews (только высота) изменяется на значение, которое я дал для привязки высоты Views.

1 Ответ

0 голосов
/ 21 мая 2018

Я только что реализовал этот пример на игровой площадке.

UIStackView использует собственный размер контента для вычисления того, как разместить свои упорядоченные подпредставления в виде стека с учетом оси, распределения, расстояния и т. Д.

Так что, если вы добавите ограничение высоты и ширины, вы увидите, что оно работает.Смотрите пример и скриншот вывода ниже.

//: Playground - noun: a place where people can play
import UIKit
import PlaygroundSupport


let stackview = UIStackView(frame: CGRect(x: 0, y: 0, width: 500, height: 150))
stackview.backgroundColor = .white
let colours: [UIColor] = [
    .blue,
    .green,
    .red,
    .yellow,
    .orange
]

for i in 0...4 {

    let view = UIView(frame: CGRect.zero)
    view.backgroundColor = colours[i]
    view.translatesAutoresizingMaskIntoConstraints = false

    if i == 2 {
        view.heightAnchor.constraint(equalToConstant: 130).isActive = true
    } else {
        view.heightAnchor.constraint(equalToConstant: 80).isActive = true
    }
    view.widthAnchor.constraint(equalToConstant: 75)

    stackview.addArrangedSubview(view)
}

stackview.axis  = .horizontal
stackview.distribution = .fillEqually
stackview.alignment = .bottom
stackview.spacing = 0.5

PlaygroundPage.current.liveView = stackview

Playground Screenshot

Вы можете перетащить этот код прямо на игровую площадку и настроить параметры интервала, распределения и т. Д., Чтобы получить желаемый результат.

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