2016-01-16 19 views
11

Mam poziomy widok stosu, do którego dodałem ułożone widoki podrzędne (7 komórek). Każda z komórek na stosie ma okrągłą plakietkę, która przekracza granice widoku (ograniczenie ujemne). Po uruchomieniu, jak widać poniżej, każda komórka znajduje się na górze znaczka poprzedniej komórki. Chciałbym zmienić zamówienie, aby odznaki były w pełni widoczne.Nakładające się widoki w UIStackView

enter image description here

Próbowałem grać z indeksu Z, ale to nie pomogło, ponieważ warstwy są jakoś nie płaska, jak widać na poniższym widoku hierarchii:

enter image description here

Każdy pomysł lub sugestia, jak to zrobić?

Dzięki.

Odpowiedz

7

documentation for the UIStackView class mówi, że:

Kolejność tablicy subviews określa Z. kolejność subviews. Jeśli widoki nakładają się, subviews z niższym indeksem pojawiają się za subviewsami o wyższym indeksie.

co jest dokładnie tym, czego doświadczyłem w pytaniu. Do ponad przyjść mój konkretny przypadek zrobiłem trick zmiany semantycznej zdania być RTL jak może pszczoła zobaczyć tutaj:

enter image description here

To nie obejmujące ogólny przypadek, ponieważ urządzenie może być ustawione język RTL w jego ustawieniach globalnych. Dla ogólnego przypadku myślę, że będę musiał sprawdzić semantyczny interfejs i wymusić przeciwny kierunek do mojego widoku stosu.

P.S. To trochę hack, więc wszelkie pomysły na zmianę kolejności subskrybentów w inny sposób będą mile widziane!

1

Innym pomysłem może być ustawienie koloru tła z subviews (7 komórek) do wartości domyślnych (pełni przejrzyste). I ustaw tylko tło widoku stosu na białe.

Mam podobny problem, ale w którym każde wyeksponowanie musi mieć określone tło. A w moim przypadku twój hack może pomóc ... Dzięki za to!

2

Od wersji iOS 9.0 można niezależnie ustawić kolejność z i układ widoków stosu. Użyj nowej właściwości arrangedSubviews, aby określić układ podekcji wzdłuż osi widoku stosu. I użyj właściwości subviews, aby określić widoki podrzędne na podstawie ich indeksu w tablicy.

Widok stosu zapewnia, że ​​jego właściwość arrangedSubviews jest zawsze podzestawem jego właściwości .

Documentation for arrangedSubviews

1

Poniżej jest prostym przedłużeniem w UIStackView odwrócić z-indeks subviews UIStackView jest ewentualnie wymagać układ:

extension UIStackView { 

    func reverseSubviewsZIndex(setNeedsLayout: Bool = true) { 
    let stackedViews = self.arrangedSubviews 

    stackedViews.forEach { 
     self.removeArrangedSubview($0) 
     $0.removeFromSuperview() 
    } 

    stackedViews.reversed().forEach(addSubview(_:)) 
    stackedViews.forEach(addArrangedSubview(_:)) 

    if setNeedsLayout { 
     stackedViews.forEach { $0.setNeedsLayout() } 
    } 
    } 

} 
4

Ta szybka roztwór odwraca stosu widok podrzędny kolejności przy użyciu metody UIView sendSubview(toBack:) (docs here):

@IBOutlet weak var stackView: UIStackView! 

for view in stackView.arrangedSubviews { 
    stackView.sendSubview(toBack: view) 
} 

Podczas przechodzenia przez ułożone widoki widoku stosu (od dołu do góry), późniejszy (tj. wyższe) widoki zostają przesunięte na sam dół, odwracając w ten sposób kolejność :-)