Пропорционально установите представления внутри UIStackView с использованием множителя - быстро - программно - PullRequest
0 голосов
/ 10 июля 2020

Я устанавливаю вертикальный stackView, который заполняет все представление контейнера.

в инициализаторе представления контейнера Я помещаю этот код, предназначенный для установки пропорциональных высот для упорядоченных подпредставлений:

    view1.heightAnchor.constraint(equalTo: self.heightAnchor, multiplier: 0.2).isActive = true
    view2.heightAnchor.constraint(equalTo: self.heightAnchor, multiplier: 0.6).isActive = true
    view3.heightAnchor.constraint(equalTo: self.heightAnchor, multiplier: 0.2).isActive = true
    
    
    let stackView = UIStackView(arrangedSubviews: [view1, view2, view3])
    
    stackView.axis = .vertical
    
    

    addSubview(stackView)
    stackView.fillSuperview()

Когда я пытаюсь запустить, я получаю эту ошибку:

Unable to activate constraint with anchors [...] because they have no common ancestor. Does the constraint or its anchors reference items in different view hierarchies? That's illegal.'

1 Ответ

0 голосов
/ 10 июля 2020

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

let view1 = UIView()
let view2 = UIView()
let view3 = UIView()

view1.backgroundColor = .red
view2.backgroundColor = .blue
view3.backgroundColor = .green

let stackView = UIStackView(arrangedSubviews: [view1, view2, view3])
stackView.frame = CGRect(x: 0, y: 0, width: 40, height: 100)
stackView.axis = .vertical

view1.heightAnchor.constraint(equalTo: stackView.heightAnchor, multiplier: 0.2).isActive = true
view2.heightAnchor.constraint(equalTo: stackView.heightAnchor, multiplier: 0.6).isActive = true
view3.heightAnchor.constraint(equalTo: stackView.heightAnchor, multiplier: 0.2).isActive = true

введите описание изображения здесь

...