UIStackView
내부적으로 구속 조건을 사용하여 배열 된 서브 뷰를 배치합니다. 정확히 어떤 제약 조건이 작성되는지는 스택보기 자체의 구성 방법에 따라 다릅니다. 기본적으로 스택 뷰는 정렬 된 하위 뷰를 수평선으로 배치하여 선행 및 후행보기를 고유 한 선행 및 후행 가장자리에 고정하는 구속 조건을 작성합니다. 따라서 코드는 다음과 같은 레이아웃을 생성합니다.
|[view1][view2]|
각 서브 뷰에 할당 된 공간은 서브 뷰의 고유 컨텐츠 크기 및 압축 저항 및 컨텐츠 껴안기 우선 순위를 포함한 여러 가지 요소에 의해 결정됩니다. 기본적으로 UIView
인스턴스는 고유 컨텐츠 크기를 정의하지 않습니다. 이것은 일반적으로 UILabel
또는 과 같은 서브 클래스에 의해 제공되는 것입니다 UIButton
.
두 개의 새로운 UIView
인스턴스 의 콘텐츠 압축 저항과 콘텐츠 껴안기 우선 순위가 동일하고 어떤 뷰도 본질적인 콘텐츠 크기를 제공하지 않기 때문에 레이아웃 엔진은 각 뷰에 어떤 크기를 할당해야하는지 최대한 추측해야합니다. 귀하의 경우 첫 번째보기는 사용 가능한 공간의 100 %를 할당하고 두 번째보기에는 아무것도 할당하지 않습니다.
UILabel
인스턴스를 대신 사용하도록 코드를 수정 하면 더 나은 결과를 얻을 수 있습니다.
UILabel *label1 = [UILabel new];
label1.text = @"Label 1";
label1.backgroundColor = [UIColor blueColor];
UILabel *label2 = [UILabel new];
label2.text = @"Label 2";
label2.backgroundColor = [UIColor greenColor];
[self.stack1 addArrangedSubview:label1];
[self.stack1 addArrangedSubview:label2];
제약 조건을 명시 적으로 만들 필요는 없습니다. 이것이 사용의 주요 이점입니다 UIStackView
. 개발자가 제약 관리에 대한 세부 정보를 숨기는 경우가 많습니다.