Próbowałem zmienić UIStackView
tło z przezroczystego na białe w Inspektorze scenorysów, ale podczas symulacji kolor tła widoku stosu nadal ma wyraźny kolor.
Jak mogę zmienić kolor tła UIStackView
?
ios
swift
uistackview
LukasTong
źródło
źródło
Odpowiedzi:
Odniesienie z TUTAJ .
EDYTOWAĆ:
Możesz dodać subView do,
UIStackView
jak wspomniano TUTAJ lub w tej odpowiedzi (poniżej) i przypisać mu kolor. Sprawdź poniżejextension
:Możesz go używać tak, jak:
źródło
drawRect()
jest nazywany. Możesz po prostu przetestować podklasęUIStackView
if let backgroundView = self.subviews.first(where: {$0.tag == 123}) {
. Jeśli tak, zmieniam kolor tła tego widoku.Robię to tak:
Działa jak marzenie
źródło
@IBDesignable class StackView
Co pozwoli ci projektować na Story Board. Nie zależy mi zbytnio na dodawaniu tła w czasie wykonywania, ale bardzo trudno jest zaprojektować widok stosu, gdy nie ma on koloru na planszyUIStackView
nie jest elementem renderującym i jako taki nie jest rysowany na ekranie. Oznacza to, że zmiana wbackgroundColor
zasadzie nic nie robi. Jeśli chcesz zmienić kolor tła, po prostu dodajUIView
do niego widok podrzędny (który nie jest ułożony), jak poniżej:źródło
Być może najłatwiejszym, bardziej czytelnym i mniej hakerskim sposobem byłoby osadzenie elementu
UIStackView
w aUIView
i ustawienie koloru tła widoku.I nie zapomnij odpowiednio skonfigurować ograniczeń automatycznego układu między tymi dwoma widokami… ;-)
źródło
Pitiphong ma rację, aby uzyskać widok stosu z kolorem tła, wykonaj coś takiego ...
W ten sposób otrzymasz widok stosu, którego zawartość zostanie umieszczona na czerwonym tle.
Aby dodać dopełnienie do widoku stosu, aby zawartość nie była równo z krawędziami, dodaj następujący kod w kodzie lub w serii ujęć ...
źródło
TL; DR: Oficjalnym sposobem na to jest dodanie pustego widoku do widoku stosu za pomocą
addSubview:
metody i zamiast tego ustawienie dodanego widoku tła.Wyjaśnienie: UIStackView to specjalna podklasa UIView, która wykonuje tylko układ, a nie rysuje. Tak wiele jego właściwości nie będzie działać jak zwykle. A ponieważ UIStackView będzie układał tylko swoje uporządkowane podglądy, oznacza to, że możesz po prostu dodać do niego UIView z
addSubview:
metodą, ustawić jego ograniczenia i kolor tła. To jest oficjalny sposób na osiągnięcie tego, co chcesz cytować z sesji WWDCźródło
To działa dla mnie w Swift 3 i iOS 10:
źródło
W iOS10 odpowiedź @ Arbitur wymaga setNeedsLayout po ustawieniu koloru. Oto zmiana, która jest potrzebna:
źródło
backgroundColor
przed dodaniem go dosuperview
działa na ios10 i ios9 jednak, jeśli zaktualizowanebackgroundColor
po jegolayoutSubviews()
funkcja została wywołana po prostu nie byłby AktualizacjabackgroundColor
zbackgroundLayer
co oznacza brak wizualnych aktualizacji. Naprawiono teraz, dziękuję za wskazanie tego.Oto krótkie omówienie dodawania koloru tła widoku stosu.
Tworzenie widoku tła z zaokrąglonymi narożnikami
Aby pojawił się jako tło, dodajemy go do tablicy subviews widoku stosu głównego pod indeksem 0. To umieszcza go za ułożonymi widokami widoku stosu.
Dodaj ograniczenia, aby przypiąć backgroundView do krawędzi widoku stosu, używając małego rozszerzenia w UIView.
zadzwoń
pinBackground
zviewDidLoad
Odniesienie z: TUTAJ
źródło
Możesz zrobić małe rozszerzenie
UIStackView
Stosowanie:
źródło
Wersja platformy Xamarin, C #:
źródło
źródło
Podklasa UIStackView
Następnie w twojej klasie
źródło
Możesz wstawić podwarstwę do StackView, dla mnie działa:
źródło
Jestem trochę sceptyczny w kwestii tworzenia podklas komponentów interfejsu użytkownika. Tak go używam,
I to jest użycie,
Uwaga: W przypadku tego podejścia, jeśli chcesz ustawić obramowanie, musisz ustawić
layoutMargins
w stackView, aby obramowanie było widoczne.źródło
Nie możesz dodać tła do widoku stosu. Ale co możesz zrobić, to dodać widok stosu w widoku, a następnie ustawić tło widoku, aby wykonać zadanie. * Nie zakłóci to przepływu widoku stosu. Mam nadzieję, że to pomoże.
źródło
Możemy mieć taką klasę niestandardową
StackView
:Można go używać w następujący sposób:
Jest to nieco lepsze niż dodanie funkcji rozszerzenia,
func addBackground(color: UIColor)
jak sugerują inni. Widok tła jest leniwy, więc nie zostanie utworzony, dopóki nie zadzwoniszstackView.backgroundView.backgroundColor = ...
. Wielokrotne ustawienie / zmiana koloru tła nie spowoduje wstawienia wielu widoków podrzędnych do widoku stosu.źródło
Jeśli chcesz sterować z poziomu samego projektanta, dodaj to rozszerzenie do widoku stosu
źródło
Możesz to zrobić tak:
Zapewniając rozszerzenie, aby zastąpić
backgroundColor
:źródło
Wypróbuj BoxView . Jest podobny do UIStackView, ale renderuje i obsługuje więcej opcji układu.
źródło