Jak przewinąć UIScrollView do góry?
ios
objective-c
iphone
uiscrollview
uikit
Jack Humphries
źródło
źródło
UIScrollView
contentInset
niestety.[self.scrollView setContentOffset:CGPointMake(self.scrollView.contentOffset.x, -self.scrollView.contentInset.top) animated:YES];
robi robotę za mnie[scrollView setContentOffset:CGPointMake(0, -scrollView.contentInset.top) animated:YES];
Działa na iOS 6 i 7[scrollView setContentOffset:CGPointMake(0, scrollView.contentSize.height-scrollView.frame.size.height) animated:YES];
Oto rozszerzenie Swift, które to ułatwia:
Stosowanie:
źródło
iOS 11 i nowsze
spróbuj pracować z nowym
adjustedContentInset
.Na przykład (przewiń do góry):
źródło
Dla Swift 4
źródło
Posługiwać się
setContentOffset:animated:
źródło
Odpowiedź dla Swift 2.0 / 3.0 / 4.0 i iOS 7+:
źródło
W iOS7 miałem problem z uzyskaniem określonego widoku przewijania na górę, który działał w iOS6, i użyłem tego do ustawienia widoku przewijania na górę.
źródło
Odpowiedź Roba Mayoffa w Swift 3.0.1 :
źródło
Aby w pełni odtworzyć zachowanie scrollToTop paska stanu, musimy nie tylko ustawić contentOffset, ale także upewnić się, że wskaźniki scrollIndicators są wyświetlane. W przeciwnym razie użytkownik może szybko się zgubić.
Jedyną publiczną metodą osiągnięcia tego jest
flashScrollIndicators
. Niestety, wywołanie go raz po ustawieniu contentOffset nie daje żadnego efektu, ponieważ jest resetowane natychmiast. Zauważyłem, że działa, gdy wykonuję flashowanie za każdym razem wscrollViewDidScroll:
.W swoim UIScrollViewDelegate (lub UITable / UICollectionViewDelegate) zaimplementuj to:
Opóźnienie ukrywania jest nieco krótsze w porównaniu do zachowania scrollToTop paska stanu, ale nadal wygląda ładnie.
Zauważ, że nadużywam tagu widoku do komunikowania stanu „isScrollingToTop”, ponieważ potrzebuję tego między kontrolerami widoku. Jeśli używasz tagów do czegoś innego, możesz zamienić to na iVar lub właściwość.
źródło
Myślę, że mam odpowiedź, która powinna być w pełni kompatybilna z iOS 11, a także wcześniejszymi wersjami (do przewijania w pionie)
Uwzględnia to nowy dostosowany zestaw treści, a także dodatkowe przesunięcie wymagane, gdy preferowane są duże tytuły jest włączona navigationBar który wydaje się wymagać dodatkowego 52px offsetowy na szczycie, co domyślnie jest
Było to trochę trudne, ponieważ dostosowanyContentInset zmienia się w zależności od stanu titleBar (duży tytuł vs mały tytuł), więc musiałem sprawdzić i zobaczyć, jaka była wysokość titleBar i nie zastosować przesunięcia 52px, jeśli jest już w stanie dużym. Nie mogłem znaleźć innej metody sprawdzenia stanu paska nawigacji, więc jeśli ktoś ma lepszą opcję niż sprawdzenie, czy wysokość jest> 44,0, chciałbym to usłyszeć
Zainspirowany rozwiązaniem Jakuba
źródło
Jest to bardzo powszechne, gdy pasek nawigacji nakłada się na małą część zawartości scrollView i wygląda na to, że treść nie zaczyna się od góry. Aby to naprawić, zrobiłem 2 rzeczy:
źródło
Przewiń do góry za
UITableViewController
,UICollectionViewController
lub dowolnyUIViewController
koniecznościUIScrollView
źródło
W SWIFT 5 Po prostu ustaw wartość Offset na zero
źródło
Próbowałem wszystkich sposobów. Ale dla mnie nic nie działało. Wreszcie mi się to podobało.
Dodałem
self.view .addSubview(self.scroll)
linię kodu w viewDidLoad. Po rozpoczęciu konfigurowania ramki dla widoku przewijania i dodaniu komponentów do widoku przewijania.U mnie to zadziałało.
Upewnij się, że dodałeś
self.view .addSubview(self.scroll)
linię na początku. następnie możesz dodać elementy interfejsu użytkownika.źródło