나는 모든 창을 채우는 UIScrollView
을 가지고 있으며, 모든 유효한 너비를 채우는 UILabels
을 추가하려는 수직의 UIStackView
을 포함하고 있습니다.UIStackView를 제한 할 수 있습니까?
UIStackView
은 UIScrollView
의 모든 가장자리에 고정되어 있으며 모두 UIScrollView
을 채울 것으로 예상됩니다. 그러나 그것은 모든 제약 자들을 완전히 무시하고 그것들을 아이에게 맞게 크기를 조정하는 것처럼 보인다. 왜 그 행동?
scrollView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[stackView]|", options: NSLayoutFormatOptions.alignAllCenterX, metrics: nil, views: ["stackView": stackView]))
scrollView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[stackView]|", options: NSLayoutFormatOptions.alignAllCenterX, metrics: nil, views: ["stackView": stackView]))
for _ in 1 ... 20 {
let textLabel = UILabel()
textLabel.backgroundColor = UIColor.yellow
textLabel.text = "Hi World xxxx"
stackView.addArrangedSubview(textLabel)
textLabel.widthAnchor.constraint(equalTo: stackView.widthAnchor).isActive = true //Doesn't work as expected
}
은 내가 무엇을 얻을 것은 이것이다 :
내가 그런 식으로 레이블을 추가하면 것을 설명하기 위해 (시안 배경은UIScrollView
그리고 당신은 라벨 인해 그
UIStackView
모든 폭을하지 않는 것을 알 수 있습니다 제약 조건은)
을 적용하지 않습니다 그리고 내가 레이블 contraint을 변경 한 경우에만이 원하는대로 작동있는 ScrollView를 사용하는 :
textLabel.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true
왜 행동? 누군가 내가 왜 UIStackView
에 대한 제약 조건이 예상대로 작동하지 않는지 설명 할 수 있습니까?
완전한 소스 코드 avaiable at that gist
안녕하세요,'alignAllCenterX'는 코드에 아무런 영향을 미치지 않습니다. 그것을 제거 할 수 있습니다. – BangOperator