UIStackView
Verwendet interne Einschränkungen, um die angeordneten Unteransichten zu positionieren. Welche Einschränkungen erstellt werden, hängt davon ab, wie die Stapelansicht selbst konfiguriert ist. Standardmäßig erstellt eine Stapelansicht Einschränkungen, bei denen die angeordneten Unteransichten in einer horizontalen Linie angeordnet sind und die Vorder- und Nachansichten an den eigenen Vorder- und Hinterkanten befestigt werden. Ihr Code würde also ein Layout erzeugen, das folgendermaßen aussieht:
|[view1][view2]|
Der jeder Unteransicht zugewiesene Speicherplatz wird durch eine Reihe von Faktoren bestimmt, darunter die inhärente Inhaltsgröße der Unteransicht sowie deren Komprimierungsbeständigkeit und inhaltliche Prioritäten. Standardmäßig UIView
definieren Instanzen keine intrinsische Inhaltsgröße. Dies wird im Allgemeinen von einer Unterklasse wie UILabel
oder bereitgestellt UIButton
.
Da der Inhalt Komprimierungswiderstand und Inhalt umarmen Prioritäten von zwei neuen UIView
Instanzen gleich sind und keine der beiden Ansichten eine intrinsische Inhaltsgröße bietet, muss die Layout-Engine nach bestem Wissen raten, welche Größe jeder Ansicht zugewiesen werden soll. In Ihrem Fall wird der ersten Ansicht 100% des verfügbaren Speicherplatzes zugewiesen, und der zweiten Ansicht wird nichts zugewiesen.
Wenn Sie Ihren Code so ändern, dass UILabel
stattdessen Instanzen verwendet werden, erhalten Sie bessere Ergebnisse:
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];
Beachten Sie, dass es nicht erforderlich ist, selbst explizit Einschränkungen zu erstellen. Dies ist der Hauptvorteil der Verwendung UIStackView
- es verbirgt die (oft hässlichen) Details des Constraint-Managements vor dem Entwickler.