UIStackView
używa wewnętrznych ograniczeń do pozycjonowania swoich uporządkowanych widoków podrzędnych. To, jakie ograniczenia są tworzone, zależy od sposobu skonfigurowania samego widoku stosu. Domyślnie widok stosu tworzy wiązania, które układają jego rozmieszczone podwidoki w linii poziomej, przypinając widok wiodący i końcowy do własnych krawędzi wiodących i końcowych. Twój kod utworzyłby układ, który wygląda następująco:
|[view1][view2]|
Przestrzeń, która jest przydzielana do każdego widoku podrzędnego, jest określana przez szereg czynników, w tym wewnętrzny rozmiar treści podglądu podrzędnego oraz jego odporność na kompresję i priorytety obejmowania treści. Domyślnie UIView
instancje nie definiują wewnętrznego rozmiaru zawartości. Jest to coś, co jest zwykle dostarczane przez podklasę, taką jak UILabel
lubUIButton
.
Ponieważ odporność na kompresję treści i priorytety przytulania treści są dwa nowe UIView
wystąpień będą takie same, a żaden widok nie zapewnia wewnętrznego rozmiaru zawartości, mechanizm układu musi jak najlepiej określić, jaki rozmiar powinien zostać przydzielony do każdego widoku. W twoim przypadku jest to przypisanie pierwszemu widokowi 100% dostępnej przestrzeni, a drugiemu nic.
Jeśli zmodyfikujesz swój kod, aby UILabel
zamiast tego używał instancji, uzyskasz lepsze wyniki:
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];
Zwróć uwagę, że nie jest konieczne samodzielne tworzenie żadnych ograniczeń. To jest główna zaleta używania UIStackView
- ukrywa przed programistą (często brzydkie) szczegóły zarządzania ograniczeniami.