2016-11-24 2 views
0

나는 모든 창을 채우는 UIScrollView을 가지고 있으며, 모든 유효한 너비를 채우는 UILabels을 추가하려는 수직의 UIStackView을 포함하고 있습니다.UIStackView를 제한 할 수 있습니까?

UIStackViewUIScrollView의 모든 가장자리에 고정되어 있으며 모두 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 모든 폭을하지 않는 것을 알 수 있습니다 제약 조건은)

Result with stackview contraints

을 적용하지 않습니다 그리고 내가 레이블 contraint을 변경 한 경우에만이 원하는대로 작동있는 ScrollView를 사용하는 :

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

이 결과는 예상대로 : enter image description here

왜 행동? 누군가 내가 왜 UIStackView에 대한 제약 조건이 예상대로 작동하지 않는지 설명 할 수 있습니까?

완전한 소스 코드 avaiable at that gist

+0

안녕하세요,'alignAllCenterX'는 코드에 아무런 영향을 미치지 않습니다. 그것을 제거 할 수 있습니다. – BangOperator

답변

1

모든 것이 올바른 것입니다. 콘텐츠보기 (스택보기)의 너비를 지정하지 않았다는 것입니다. 이 줄을 추가하면 모든 것이 완벽하게 작동합니다.

scrollView.widthAnchor.constraint(equalTo: stackView.widthAnchor, multiplier: 1).isActive = true; 

참고 : 내용보기로 폭을 제공하지 않는 콘텐츠를 볼 수있는 후행 스크롤 뷰의 선두를 고정하면. 별도의 너비 제약 조건이 필요하며, 콘텐츠보기의 너비가 본질적인 너비와 같아야합니다. 링크 : https://stackoverflow.com/a/18341997/1790683

+0

고마워요 @BangOperator. 너비 제약이 필요한 이유에 대한 자세한 정보가 있습니까? 보통 너비를 결정하기에 충분하다. – lujop

+0

예 scrollviews가 약간 다릅니다. autolayout으로 google uiscrollview를 할 수 있습니다. 곧 관련 링크를 붙여 넣을 예정입니다. – BangOperator

관련 문제