Fügen Sie Ansichten in UIStackView programmgesteuert hinzu
Ich versuche, das hinzufügen von Ansichten in UIStackView programmgesteuert.
Für jetzt Mein code ist:
UIView *view1 = [[UIView alloc]init];
view1.backgroundColor = [UIColor blackColor];
[view1 setFrame:CGRectMake(0, 0, 100, 100)];
UIView *view2 = [[UIView alloc]init];
view2.backgroundColor = [UIColor greenColor];
[view2 setFrame:CGRectMake(0, 100, 100, 100)];
[self.stack1 addArrangedSubview:view1];
[self.stack1 addArrangedSubview:view2];
Wenn ich das bereitstellen der app, es gibt nur 1 Blick, und es ist mit der Farbe schwarz.(view1 Holen Sie sich die Parameter für ansicht2)
InformationsquelleAutor der Frage Altimir Antonov | 2015-06-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stack Ansichten verwenden intrinsische Größe des Inhalts, also mit layout-constraints definieren die Abmessungen der Ansichten.
Gibt es eine einfache Möglichkeit zum hinzufügen von Einschränkungen schnell (Beispiel):
Komplette Code:
Hinweis: Dies wurde getestet auf iOS 9
InformationsquelleAutor der Antwort user1046037
Swift 3.0
Und hier ist Swift 2.0 version:
Basierend auf @user1046037 Antwort
InformationsquelleAutor der Antwort Oleg Popov
UIStackView
Einschränkungen verwendet intern seine position angeordnet Untersichten. Genau das, was Einschränkungen erstellt werden, hängt davon ab, wie die stack-Ansicht selbst wird nicht konfiguriert. Standardmäßig wird ein stack-Ansicht erstellen, die Einschränkungen, die legen Ihre Untersichten angeordnet in einer horizontalen Linie, die Belegung der führende und nachgestellte Blick auf seinen eigenen, führenden und nachgestellten Kanten. So würde der code erzeugen Sie ein layout, das wie folgt aussieht:Den zugewiesenen Speicherplatz zu jeder Untersicht wird bestimmt durch eine Anzahl von Faktoren, einschließlich der unteransicht der die wesentlichen Inhalte Größe und Komprimierung Widerstand und Inhalt umarmt Prioritäten. Standardmäßig
UIView
Instanzen definieren nicht eine intrinsische Größe des Inhalts. Dies ist etwas, das im Allgemeinen durch eine Unterklasse, wieUILabel
oderUIButton
.Da die content-Kompression Widerstand und Inhalt umarmt Prioritäten von zwei neuen
UIView
Instanzen die gleiche, und weder die Ansicht bietet eine intrinsische Größe des Inhalts, die layout-engine muss Ihre beste Vermutung, was Größe zugeordnet werden soll, zu jeder Ansicht. In Ihrem Fall ist es die Zuweisung der ersten Ansicht zu 100% des zur Verfügung stehenden Raumes, und nichts auf den zweiten Blick.Wenn du den code so ändern, verwenden Sie
UILabel
Instanzen statt, erhalten Sie bessere Ergebnisse:Beachten Sie, dass es ist nicht notwendig, ausdrücklich zu erstellen, die alle constraints selbst. Dies ist der Hauptvorteil der Verwendung
UIStackView
- es blendet die (oft hässlichen) details des constraint-Verwaltung vom Entwickler.InformationsquelleAutor der Antwort Greg Brown
Folgenden zwei Zeilen fixiert mein Problem
Swift version -
InformationsquelleAutor der Antwort Ekta
Müssen Sie legen Sie die Verteilung geben.
In Ihrem code, juste hinzufügen:
Oder Sie können die Verteilung direkt im interface builder.
Zum Beispiel:
Hoffe, das hilft 😉
Lapinou.
InformationsquelleAutor der Antwort Lapinou
Für die akzeptierte Antwort, wenn Sie versuchen, sich zu verstecken beliebigen Ansicht im Stapel anzeigen, die Einschränkung funktioniert nicht richtig.
Grund ist, wenn ausblenden der
view
imstackView
es wird festgelegt, die Höhe auf 0 zu animieren.Lösung ändern Sie die Einschränkung
priority
als unten.InformationsquelleAutor der Antwort William Hu
Verbessert auf die Antwort von @Oleg Popov
InformationsquelleAutor der Antwort Das
Ich kam gerade über sehr ähnliches problem. Nur wie bereits erwähnt der übersicht die Abmessungen richten sich eine intrinsische Größe des Inhalts der Untersichten angeordnet. Hier ist meine Lösung in Swift 2.x und folgende Struktur anzeigen:
anzeigen - UIView
customView - CustomView:UIView
stackView - UISTackView
angeordnet Untersichten - custom UIView-Unterklassen
InformationsquelleAutor der Antwort Janusz Chudzynski
Versuchen Sie folgenden code,
Hoffe, dass es funktioniert. Bitte lassen Sie mich wissen, wenn Sie brauchen mehr Aufklärung.
InformationsquelleAutor der Antwort Nilesh Patel