Почему этот стек не работает на детской площадке?

Есть идеи?

    import UIKit
    import PlaygroundSupport

    extension CGRect {
        init(_ x:CGFloat, _ y:CGFloat, _ w:CGFloat, _ h:CGFloat) {
            self.init(x:x, y:y, width:w, height:h)
        }
    }

    let v0 = UIView(frame: CGRect(0, 0, 500, 500))
    v0.backgroundColor = .white

    let v1 = UIView(frame: CGRect(0,0,500,100))
    v1.backgroundColor = .red
    v1.translatesAutoresizingMaskIntoConstraints = false

    let v2 = UIView(frame: CGRect(0,200,500,100))
    v2.backgroundColor = .yellow
    v2.translatesAutoresizingMaskIntoConstraints = false

    let v3 = UIView(frame: CGRect(0,400,500,100))
    v3.backgroundColor = .blue
    v3.translatesAutoresizingMaskIntoConstraints = false

    let sv = UIStackView(frame: CGRect(0, 0, 500, 500))
    sv.addArrangedSubview(v1)
    sv.addArrangedSubview(v2)
    sv.addArrangedSubview(v3)
    sv.axis = .vertical
    sv.alignment = .center
    sv.distribution = .fillEqually
    sv.translatesAutoresizingMaskIntoConstraints = false
    sv.backgroundColor = .orange

    v0.addSubview(sv)

NSLayoutConstraint.activate([

sv.topAnchor.constraint(equalTo: v0.topAnchor),
    sv.leadingAnchor.constraint(equalTo: v0.leadingAnchor),
    sv.trailingAnchor.constraint(equalTo: v0.trailingAnchor),
        sv.bottomAnchor.constraint(equalTo: v0.bottomAnchor),
    ])

    PlaygroundPage.current.liveView = v0

Это то, что я вижу...

1 ответ

Решение

На противоположной оси нужны ограничения по размеру.

Таким образом, я добавил эти ограничения, когда просмотр стека находится в вертикальном режиме...

v1.widthAnchor.constraint(equalTo: v0.widthAnchor)
v2.widthAnchor.constraint(equalTo: v0.widthAnchor)
v3.widthAnchor.constraint(equalTo: v0.widthAnchor)

И в горизонтальном...

v1.heightAnchor.constraint(equalTo: v0.heightAnchor)
v2.heightAnchor.constraint(equalTo: v0.heightAnchor)
v3.heightAnchor.constraint(equalTo: v0.heightAnchor)

Также можно снять рамки на цветных видах.

Другие вопросы по тегам