2013-03-22 10 views
5

Używam niestandardowego widoku, który dziedziczy z UIScrollView. Problem, który mam, to dodanie UILabel, które powinno być wyświetlane na górze, przed innymi widokami. Działa, ale niestety obejmuje również wskaźniki przewijania.UIScrollView - Przenoszenie widoku do przodu, ale poniżej wskaźników przewijania

enter image description here

Jak widać, wskaźnik przewijania jest zasłonięty. Nie chcę wyłączać wskaźników przewijania.

dodaję poglądy bezpośrednio do UIScrollView:

UILabel *subsection = [[UILabel alloc] initWithFrame:CGRectMake(0, y * h, 
    [self totalContentWidth], [tableViewDelegate rowHeight])]; 
[subsection setText:subsectionName]; 
[subsection setTextAlignment:NSTextAlignmentCenter]; 

[subSectionRows setValue:subsection forKey:key]; 

[self addSubview:subsection]; 

a potem przenosząc je do przodu, który

- (void) bringSubsectionsToFront { 
    for (UIView* row in [self.subSectionRows allValues]) { 
     [self bringSubviewToFront:row]; 
    } 
} 

Takie zachowanie jest mylące dla mnie. Jeśli zerknę na UIView.layer.zPosition wszystkich widoków UIScrollView, wszystkie są takie same.

Jeśli zmienię metodę bringSubsectionsToFront, aby przesunąć etykiety przed widokiem zawierającym linie siatki, zachowanie jest takie samo.

Patrząc na niektórych wewnętrznych klas widoków, których zachowanie dzieła, to wygląda tak, jakby są one dodawane do widoku przewijania z: [self insertSubview:cell atIndex:0];

Co ja tu brakuje?

Rozwiązanie: verec zauważył, że udało mi się znaleźć bary, gdybym naprawdę chciał. Tak więc przeszedłem iterację nad listą podrzędnych w odpowiednim momencie i na pewno tam byli. Kolejność obiektów przedstawia się następująco:

CustomCell 
... 
UIImageView 
UIImageView 
CustomBorderView 
UILabel 
UILabel 

Zakładając ten jest zamawianie oo, nic dziwnego, moi etykiety były zawsze na wierzchu.

Rozwiązanie staje się proste; dodaj UILabel po CustomCells. To rozwiązanie działa tylko dlatego, że niestandardowa tabela dodaje CustomCells do indeksu 0, co moim zdaniem powoduje pojawienie się wskaźników przewijania po CustomCells. Jeśli to założenie zostanie spełnione, mogę zmienić kolejność innych widoków względem CustomCells, osiągając żądany efekt warstwowania.

Odpowiedz

4

Najprostszym jest użycie i pośrednie UIView, nazwij go "contentView", którego dzieci są widokami, które chcesz przynieśćToFront.

Jeśli contentView jest tym, co znajduje się wewnątrz scrollView, pozostanie on "poniżej" wskaźników przewijania, niezależnie od tego, które dziecko contentView przeniesiemy na wierzch.

Alternatywą byłoby zeskanowanie do scrollView szukania wskaźników przewijania (znajdziesz je!), Ale to jest ryzyko kompatybilności, ponieważ nigdy nie wiesz, czy/kiedy Apple może zdecydować się na usunięcie/zmianę/zmianę położenia zgodnie z jakiś nowy (bardziej płaski ...) paradygmat projektu ...

Powiązane problemy