2010-01-07 10 views
23

Mam UIScrollView, który tworzę i wielkość dynamicznie przy użyciu ...UIScrollView nie pokazuje wskaźnik przewijania

scrollView.contentSize = CGSizeMake(scrollView.frame.size.width , length); 

Następnie dodać subviews do UIScrollView. Mam scrollView.showsVerticalScrollIndicator = YES;

Podczas przewijania wskaźnik przewijania nigdy nie pojawia się.

Nawet jeśli zadzwonię pod numer [scrollView flashScrollIndicators] nic się nie stanie.

Pomysły?

+0

Wygląda dobrze dla mnie. Na pewno nie ustawiasz go gdzieś indziej na NIE? –

Odpowiedz

66

miał ten sam problem i nie mogli znaleźć przyczyny. Ostatnia odpowiedź dała ostatnią wskazówkę: za każdym razem, gdy dodawałem nowe subviews, najpierw usunąłem wszystkie istniejące widoki z przewijania (i najwyraźniej także wskaźniki przewijania).

Po sprawdzeniu w moim pętli, jeśli subview naprawdę było tego rodzaju chciałem zostać usunięte wskaźniki przewijania pokazał się:

for (NSObject * subview in [[[scrollView subviews] copy] autorelease]) { 
    if ([subview isKindOfClass:[MySubView class]]) { 
     [(MySubView*)subview removeFromSuperview]; 
    } 
} 

Aktualizacja: zmienił kod na sugestię Mikołaja

+2

W tym kodzie występuje subtelny błąd: metoda 'subviews' UIView zwraca pierwotną tablicę subskrybentów używanych przez widok. Oznacza to, że powyższy kod mutuje tablicę podczas iteracji. Łatwa naprawa: iteracja ponad '[[[scrollView subviews] copy] autorelease]' –

+0

wow ... ta odpowiedź rozwiązała 2 błędy na raz :) dziękuję: D –

+0

To jest idealne rozwiązanie, dzięki – RVN

0

Zauważyłem to, gdy UIScrollView był pionowym pasmem o wysokości 48 pikseli, przewijanym poziomo. Może kakao decyduje, że obszar jest za mały na wskaźnik przewijania ...

+0

W tym przypadku przewijany widok jest kilkakrotnie dłuższy niż długość ekranu i dokładnie szerokość ekranu. – George

14

Kiedy zajmowałem się tym wcześniej, w mojej implementacji siatki czasami odbierałem komórki nad górną częścią wskaźnika przewijania. Aby to naprawić, wstawiam teraz subviews do indeksu 0, zamiast dodawać je, co dodaje je do góry. Więc spróbuj coś takiego:

[scrollview insertSubview:subview atIndex:0];

+0

Czy istnieje szansa na podobne rozwiązanie dla 'UICollectionView'? – rounak

1

Będzie także się zdarzyć (przynajmniej w przypadku UITableView), jeśli contentSize jest zbyt mały, aby przewinąć widok tabeli. Jeśli włączono podskakiwanie, widok stołu faktycznie nie jest przewijany i dlatego nie wyświetla wskaźników. Spróbuj dopasować więcej zawartości do środka.

8

to naprawić dodając ten kod po dodać nowy podrzędny:

self.showsVerticalScrollIndicator = NO; 
self.showsVerticalScrollIndicator = YES; 
+0

To i treść obejmująca moje wskaźniki była źródłem problemu, z którym się zetknąłem. – jbierling

2

To może zdarzyć się również wtedy, gdy dominującą Scrollview jest mniejszy poziomo niż widok przewijania samego:

zwój Pasek jest zablokowany po prawej stronie ScrollView/TableView, a prawa strona jest niewidoczna ze względu na granice rodzica (z ukrywaniem na przykład clipToBounds).

Widziałem ten problem, więc udostępniam go na wypadek, gdyby mógł pomóc.

Sprawdź, czy szerokość ramki ScrollView nie jest większa niż szerokość jej ramki widoku rodzica.

10

Dla mnie poziomy wskaźnik zniknął w mojej aplikacji w systemie iOS 7. Później okazało się, że z jakiegoś dziwnego powodu musiałem włączyć zarówno Shows Horizontal Indicator, jak i Shows Vertical Indicator, aby pojawił się poziomo. Jeśli ustawię go tak, aby nie pokazywał wskaźnika pionowego, nie wyświetlałby również wskaźnika poziomego.

enter image description here

+1

Problemy z Sigh .. first world iOS7. To naprawiło mój problem. –

0

dwa warunki,

  1. Jeśli używasz storyboard
  2. Jeśli używasz UITableView wewnątrz UIViewController

Następnie należy sprawdzić wypustki wskaźnikowe są ustawione na 0 (lub jakakolwiek inna liczba, która jest istotna dla twojego autolayout):

enter image description here

Powiązane problemy