Ich habe versucht, den UIStackView
Hintergrund im Storyboard-Inspektor von klar auf weiß zu ändern , aber beim Simulieren hat die Hintergrundfarbe der Stapelansicht immer noch eine klare Farbe.
Wie kann ich die Hintergrundfarbe von a ändern UIStackView
?
ios
swift
uistackview
LukasTong
quelle
quelle
Antworten:
Referenz von HIER .
BEARBEITEN:
Sie können eine Unteransicht
UIStackView
wie HIER oder in dieser Antwort (unten) hinzufügen und dieser eine Farbe zuweisen. Schauen Sie sich das untenextension
an:Und Sie können es verwenden wie:
quelle
drawRect()
heißt. Sie können einfach durch Unterklasse testenUIStackView
if let backgroundView = self.subviews.first(where: {$0.tag == 123}) {
. Wenn ja, ändere ich die Hintergrundfarbe dieser Ansicht.So mach ich es:
Klappt wunderbar
quelle
@IBDesignable class StackView
Damit können Sie auf Storyboard entwerfen. Ich mag es nicht besonders, zur Laufzeit einen Hintergrund hinzuzufügen, aber es ist sehr schwierig, die Stapelansicht zu entwerfen, wenn sie keine Farbe auf dem Storyboard hatUIStackView
ist ein nicht renderendes Element und wird daher nicht auf dem Bildschirm gezeichnet. Dies bedeutet, dass Änderungen imbackgroundColor
Wesentlichen nichts bewirken. Wenn Sie die Hintergrundfarbe ändern möchten, fügenUIView
Sie einfach eine Unteransicht (die nicht angeordnet ist) wie folgt hinzu:quelle
Vielleicht wäre der einfachste, lesbarere und weniger hackige Weg, das
UIStackView
in ein einzubettenUIView
und die Hintergrundfarbe auf die Ansicht einzustellen.Und vergessen Sie nicht, die Einschränkungen für das automatische Layout zwischen diesen beiden Ansichten richtig zu konfigurieren… ;-)
quelle
Pitiphong ist richtig, um eine Stapelansicht mit einer Hintergrundfarbe zu erhalten, gehen Sie wie folgt vor ...
Dadurch erhalten Sie eine Stapelansicht, deren Inhalt auf einem roten Hintergrund platziert wird.
Um der Stapelansicht eine Auffüllung hinzuzufügen, damit der Inhalt nicht bündig mit den Kanten abschließt, fügen Sie Folgendes im Code oder im Storyboard hinzu ...
quelle
TL; DR: Der offizielle Weg, dies zu tun, besteht darin, eine leere Ansicht mithilfe der
addSubview:
Methode in die Stapelansicht einzufügen und stattdessen den Hintergrund der hinzugefügten Ansicht festzulegen.Die Erklärung: UIStackView ist eine spezielle UIView-Unterklasse, die nur das Layout und nicht das Zeichnen ausführt. So viele seiner Eigenschaften funktionieren nicht wie gewohnt. Und da UIStackView nur die angeordneten Unteransichten anordnet, können Sie ihm einfach eine UIView mit
addSubview:
Methode hinzufügen , die Einschränkungen und die Hintergrundfarbe festlegen. Dies ist der offizielle Weg, um das zu erreichen, was Sie aus der WWDC-Sitzung zitieren möchtenquelle
Dies funktioniert bei mir in Swift 3 und iOS 10:
quelle
In iOS10 benötigt die Antwort von @ Arbitur ein setNeedsLayout, nachdem die Farbe festgelegt wurde. Dies ist die Änderung, die benötigt wird:
quelle
backgroundColor
bevor Sie es zu einem hinzufügen,superview
funktioniert es auf ios10 und ios9. Wenn Sie jedoch das aktualisiert haben,backgroundColor
nachdem seinelayoutSubviews()
Funktion aufgerufen wurde, wirdbackgroundColor
diebackgroundLayer
Bedeutung einfach kein visuelles Update aktualisiert. Jetzt behoben, danke für den Hinweis.Hier ist eine kurze Übersicht zum Hinzufügen einer Hintergrundfarbe für die Stapelansicht.
Hintergrundansicht mit abgerundeten Ecken erstellen
Damit es als Hintergrund angezeigt wird, fügen wir es dem Unteransichtsarray der Stammstapelansicht bei Index 0 hinzu. Dadurch wird es hinter die angeordneten Ansichten der Stapelansicht verschoben.
Fügen Sie mithilfe einer kleinen Erweiterung in UIView Einschränkungen hinzu, um die Hintergrundansicht an den Rändern der Stapelansicht anzuheften.
Rufen Sie die
pinBackground
vonviewDidLoad
Referenz von: HIER
quelle
Sie könnten eine kleine Erweiterung von machen
UIStackView
Verwendung:
quelle
Xamarin, C # -Version:
quelle
quelle
Unterklasse UIStackView
Dann in deiner Klasse
quelle
Sie können eine Unterschicht in StackView einfügen, es funktioniert für mich:
quelle
Ich bin etwas skeptisch bei der Unterklassifizierung von UI-Komponenten. So benutze ich es,
Und das ist die Verwendung,
Hinweis: Wenn Sie bei diesem Ansatz einen Rahmen festlegen möchten, müssen Sie ihn in
layoutMargins
der stackView festlegen, damit der Rahmen sichtbar ist.quelle
Sie können der Stapelansicht keinen Hintergrund hinzufügen. Sie können jedoch eine Stapelansicht in eine Ansicht einfügen und dann den Hintergrund der Ansicht festlegen, um die Aufgabe zu erledigen. * Es wird den Fluss von Stackview nicht unterbrechen. Hoffe das wird helfen.
quelle
Wir können eine benutzerdefinierte Klasse
StackView
wie diese haben:Und es kann so verwendet werden:
Dies ist etwas besser als das Hinzufügen einer Erweiterungsfunktion,
func addBackground(color: UIColor)
wie von anderen vorgeschlagen. Die Hintergrundansicht ist faul, sodass sie erst erstellt wird, wenn Sie tatsächlich anrufenstackView.backgroundView.backgroundColor = ...
. Wenn Sie die Hintergrundfarbe mehrmals einstellen / ändern, werden nicht mehrere Unteransichten in die Stapelansicht eingefügt.quelle
Wenn Sie vom Designer selbst aus steuern möchten, fügen Sie diese Erweiterung zur Stapelansicht hinzu
quelle
Sie könnten es so machen:
Durch die Bereitstellung einer Erweiterung zum Überschreiben von
backgroundColor
:quelle
Probieren Sie BoxView aus . Es ähnelt UIStackView, rendert jedoch und unterstützt mehr Layoutoptionen.
quelle