2017-10-05 2 views
2

Ich habe eine UIScrollView, die eine UIStackView enthält, und ich füge Ansichten hinzu und wenn die UIStackView mehr Platz als der Bildschirm hat dann wird es dank der UIScrollView scrollen.Einstellung konstante Breite auf Unteransicht von UIStackView, wenn Achse vertikal ist

Ich kann konstante Höhen auf den Ansichten festlegen, aber ich muss auch eine bestimmte Breite auf ihnen festlegen, so dass sie eine bestimmte Breite haben und auch in der Stapelansicht zentriert sind.

So etwas, außer der widthAnchor funktioniert nicht.

import UIKit 

class ViewController: UIViewController { 

    let scrollView: UIScrollView = { 
     let sv = UIScrollView() 
     sv.translatesAutoresizingMaskIntoConstraints = false 
     sv.backgroundColor = .gray 
     return sv 
    }() 

    let stackView: UIStackView = { 
     let sv = UIStackView() 
     sv.translatesAutoresizingMaskIntoConstraints = false 
     sv.axis = .vertical 
     return sv 
    }() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     view.addSubview(scrollView) 

     scrollView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true 
     scrollView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true 
     scrollView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true 
     scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true 

     scrollView.addSubview(stackView) 

     stackView.leftAnchor.constraint(equalTo: scrollView.leftAnchor).isActive = true 
     stackView.rightAnchor.constraint(equalTo: scrollView.rightAnchor).isActive = true 
     stackView.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true 
     stackView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true 

     stackView.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true 

     let view1 = UIView() 
     view1.backgroundColor = .red 

     let view2 = UIView() 
     view2.backgroundColor = .blue 

     let view3 = UIView() 
     view3.backgroundColor = .green 

     let view4 = UIView() 
     view4.backgroundColor = .purple 

     stackView.addArrangedSubview(view1) 
     stackView.addArrangedSubview(view2) 
     stackView.addArrangedSubview(view3) 
     stackView.addArrangedSubview(view4) 

     view1.heightAnchor.constraint(equalToConstant: 200).isActive = true 
     view2.heightAnchor.constraint(equalToConstant: 300).isActive = true 
     view3.heightAnchor.constraint(equalToConstant: 420).isActive = true 
     view4.heightAnchor.constraint(equalToConstant: 100).isActive = true 

     // This does not work. 
//  view1.widthAnchor.constraint(equalToConstant: 40).isActive = true 
    } 

} 

Antwort

2

Die alignment Eigenschaft auf einem UIStackView bestimmt, wie das Layout senkrecht zu seiner Achse arbeitet. Standardmäßig hat ein UIStackView eine Ausrichtung von fill. Unter Constraint-Bedingungen ist fill dem Hinzufügen einer Einschränkung zu (in diesem Fall) dem linken und rechten Rand der Stapelansicht für jede angeordnete Unteransicht. Diese impliziten Einschränkungen verursachen wahrscheinlich Ihr Problem. Lösung: Set stackView.alignment = entweder leading, center oder trailing je nach Ihrem gewünschten Effekt.

+2

Wenn Sie möchten, dass die Stapelansicht breiter wird, verwenden Sie den Breitenanker der Stapelansicht. –

Verwandte Themen