2008-10-06 12 views
11

Mam UIScrollView, który pokazuje dane pionowe, ale gdzie element poziomy nie jest szerszy niż ekran iPhone. Problem polega na tym, że użytkownik nadal może przeciągać w poziomie i zasadniczo eksponować puste sekcje interfejsu użytkownika. Próbowałem ustawić:Jak zatrzymać rzutowanie UIScrollView w poziomie?

scrollView.alwaysBounceHorizontal = NO; 
scrollView.directionalLockEnabled = YES; 

Co trochę pomaga, ale nadal nie powstrzymuje użytkownika przed przeciąganiem w poziomie. Z pewnością istnieje sposób, aby to naprawić?

Odpowiedz

14

To dziwne, ponieważ za każdym razem, gdy utworzę widok przewijania z ramką i rozmiarem treści w granicach ekranu w dowolnym wymiarze, widok przewijania nie będzie przewijany (ani odrzucany) w tym kierunku.

// Should scroll vertically but not horizontally 
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; 
scrollView.contentSize = CGSizeMake(320, 1000); 

Czy na pewno ramka pasuje całkowicie do ekranu, a szerokość funkcji contentSize nie jest większa niż szerokość widoku przewijania?

+0

Miałem niewłaściwy scrollView.contentSize ... dzięki! – rustyshelf

6

Spróbuj ustawić scrollView.bounces na NO i scrollView.alwaysBounceVertical na YES.

+2

Jest w połowie drogi, teraz przewija się pionowo, ale nigdy poziomo, ale już nie odbija się pionowo ... Byłoby miło, gdyby nadal mógł odbijać się w pionie, ponieważ przewinięcie bez tego odbicia na iPhonie wydaje się nienaturalne. – rustyshelf

+0

@rustyshelf Wiem, że jest trochę za późno, ale oprócz odpowiedzi Darrona, również wykonaj polecenie 'scrollView. directionalLockEnabled = YES' – hyd00

1

Upewnij się, że rozmiar treści UIScrollView nie jest szerszy niż sam UIScrollView. W moich własnych aplikacjach było to wystarczające, aby uniknąć przewijania w poziomie, z wyjątkiem przypadków, w których naprawdę szalony ruch w przypadkowych kierunkach (np. Uruchamianie przewijania, gdy widok wciąż zwalniał).

1

Coś, o czym należy pamiętać: Ty,, wiesz, że nie ma nic więcej do zobaczenia w poziomie, ale czy użytkownicy będą o tym wiedzieć? Możesz nieco odskoczyć w poziomie, nawet jeśli nie ma żadnej dodatkowej zawartości do wyświetlenia w poziomie. Dzięki temu wiemy, że ich próby przewijania w poziomie nie są ignorowane, nie ma po prostu nic do zobaczenia. Ale, tak, często naprawdę nie chcesz odbić.

0

Moja wersja dla WebViews, wspólne rozwiązanie:

- (void)webViewDidFinishLoad:(UIWebView *)webView { 

[webView.scrollView setContentSize: CGSizeMake(webView.frame.size.width, webView.scrollView.contentSize.height)]; 

} 
2

, czy rzutem zwoje (i odbija) poziomo zależy od trzech rzeczy:

  • Wielkość zawartość
  • Lewa i odpowiednie wstawki zawartości
  • Szerokość przewijania -

Jeśli widok przewijania może zmieścić się w rozmiarze zawartości oraz wstawkach, to nie jest przewijany ani przewijany.

Unikać poziomy odbijanie tak:

scrollView.contentSize = CGSizeMake(scrollView.frame.size.width - scrollView.contentInset.left - scrollView.contentInset.right, height); 

dodaję tę odpowiedź, ponieważ poprzednie nie brał contentInset pod uwagę.

6

pole wyboru odbiciu pionowo w serii ujęć-Scrollview może po prostu pomóc ...

enter image description here

17
scrollView.bounces = NO; 

pracował dla mnie.

0

Jeśli ktoś, kto pracuje dla OS X, szuka tutaj, tak jak w OS X 10.7, rozwiązaniem jest, aby ustawić właściwość false/NOhorizontalScrollElasticity na widoku przewijania, tak:

SWIFT:

scrollView.horizontalScrollElasticity = false 

Objective-C:

scrollView.horizontalScrollElasticity = NO 
4

To działa na mnie w Swift:

scrollView.alwaysBounceHorizontal = false 
scrollView.bounces = false