Jak mogę UIScrollView
przewinąć do dołu w kodzie? Lub w bardziej ogólny sposób, do dowolnego punktu widzenia?
298
Jak mogę UIScrollView
przewinąć do dołu w kodzie? Lub w bardziej ogólny sposób, do dowolnego punktu widzenia?
Możesz użyć funkcji UIScrollView, setContentOffset:animated:
aby przewinąć do dowolnej części widoku zawartości. Oto kod, który przewinąłby do dołu, zakładając, że scrollView to self.scrollView
:
CGPoint bottomOffset = CGPointMake(0, self.scrollView.contentSize.height - self.scrollView.bounds.size.height + self.scrollView.contentInset.bottom);
[self.scrollView setContentOffset:bottomOffset animated:YES];
Mam nadzieję, że to pomaga!
CGPoint bottomOffset = CGPointMake(0, self.scrollView.contentSize.height - self.scrollView.bounds.size.height + self.scrollView.contentInset.bottom);
contentSize
jest niższy niżbounds
. Tak powinno być:scrollView.setContentOffset(CGPointMake(0, max(scrollView.contentSize.height - scrollView.bounds.size.height, 0) ), animated: true)
let bottomOffsetY = max(collectionView.contentSize.height - collectionView.bounds.height + collectionView.contentInset.bottom, 0)
Szybka wersja zaakceptowanej odpowiedzi do łatwego wklejania kopii:
źródło
Najprostsze rozwiązanie:
źródło
Tylko rozszerzenie istniejącej odpowiedzi.
Dba również o dolną wstawkę (na wypadek, gdybyś używał jej do dostosowania widoku przewijania, gdy klawiatura jest widoczna)
źródło
Ustawienie przesunięcia zawartości do wysokości rozmiaru zawartości jest nieprawidłowe: przewija dolną część zawartości do góry widoku przewijania, a tym samym poza zasięg wzroku.
Prawidłowym rozwiązaniem jest przewinięcie dolnej części zawartości do dolnej części przewijanego widoku, tak jak to (
sv
to UIScrollView):źródło
if (sv.contentOffset.y + csz.height > bsz.height) {
?setContentOffset:
polecenie jest ważne.Szybka implementacja:
Użyj tego:
źródło
Biorąc
contentInset
pod uwagę rozwiązanie Swift 2.2To powinno być rozszerzenie
Pamiętaj, że możesz sprawdzić, czy
bottomOffset.y > 0
przed przewinięciemźródło
Co jeśli
contentSize
jest niższy niżbounds
?Dla Swift jest to:
źródło
Przewiń na górę
Przewiń do dołu
źródło
Znalazłem również inny użyteczny sposób na zrobienie tego w przypadku korzystania z UITableview (który jest podklasą UIScrollView):
źródło
Korzystanie z
setContentOffset:animated:
funkcji UIScrollView do przewijania w dół w Swift.źródło
Wygląda na to, że wszystkie odpowiedzi tutaj nie uwzględniały bezpiecznego obszaru. Od iOS 11 iPhone X miał bezpieczny obszar. Może to wpłynąć na scrollView
contentInset
.W przypadku iOS 11 i nowszych, aby poprawnie przewinąć do dołu z dołączoną wstawką zawartości. Powinieneś użyć
adjustedContentInset
zamiastcontentInset
. Sprawdź ten kod:contentOffset.x
):Bibliografia:
źródło
W przypadku (opcjonalnie)
footerView
icontentInset
rozwiązaniem jest:źródło
Szybki:
Możesz użyć takiego rozszerzenia:
Posługiwać się:
źródło
valdyr, mam nadzieję, że to ci pomoże:
źródło
Kategoria na ratunek!
Dodaj to do współdzielonego nagłówka narzędzia gdzieś:
A następnie do implementacji tego narzędzia:
Następnie zaimplementuj go w dowolnym miejscu, na przykład:
źródło
Dla widoku poziomego ScrollView
Jeśli podoba mi się, że ma widok poziomy ScrollView i chcesz przewinąć do jego końca (w moim przypadku do jego prawej strony), musisz zmienić niektóre części akceptowanej odpowiedzi:
Cel C
Szybki
źródło
Jeśli w jakiś sposób zmienisz scrollView contentSize (np. Dodasz coś do stackView, który znajduje się w scrollView), musisz wywołać
scrollView.layoutIfNeeded()
przed przewinięciem , w przeciwnym razie nic nie zrobi.Przykład:
źródło
Dobrym sposobem na zapewnienie widoczności dolnej części treści jest użycie formuły:
Dzięki temu dolna krawędź treści zawsze znajduje się na dolnej krawędzi widoku lub powyżej niej. Jest
MIN(0, ...)
to wymagane, ponieważUITableView
(i prawdopodobnieUIScrollView
) zapewnia,contentOffsetY >= 0
gdy użytkownik próbuje przewijać poprzez widoczne przyciąganiecontentOffsetY = 0
. Wygląda to dość dziwnie dla użytkownika.Kod do wdrożenia to:
źródło
Jeśli nie potrzebujesz animacji, działa to:
źródło
Chociaż
Matt
rozwiązanie wydaje mi się poprawne, należy uwzględnić również wstawkę widoku kolekcji, jeśli istnieje taka, która została skonfigurowana.Dostosowany kod będzie:
źródło
W krótkim:
źródło
Rozwiązanie, aby przewinąć do ostatniego elementu tabeli Widok:
Swift 3:
źródło
Nie działa na mnie, gdy próbowałem go używać w
UITableViewController
sprawieself.tableView
(iOS 4.1)
, po dodaniufooterView
. Przewija się poza granice, pokazując czarny ekran.Alternatywne rozwiązanie:
źródło
źródło
Przekonałem się, że
contentSize
tak naprawdę nie odzwierciedla faktycznego rozmiaru tekstu, więc przy próbie przewinięcia w dół będzie to nieco odsuwane. Najlepszym sposobem, aby określić rzeczywisty rozmiar zawartość jest rzeczywiście korzystać zNSLayoutManager
„susedRectForTextContainer:
metody:Aby ustalić, ile tekstu faktycznie ma być wyświetlany
UITextView
, możesz go obliczyć, odejmując wstawki kontenera tekstu od wysokości ramki.Następnie łatwo jest przewijać:
Niektóre liczby w celach informacyjnych dotyczące różnych rozmiarów pustych
UITextView
.źródło
Rozszerz UIScrollView, aby dodać metodę scrollToBottom:
źródło
Wersja akceptowanej odpowiedzi Xamarin.iOS
źródło
Wersja Xamarin.iOS dla
UICollectionView
zaakceptowanej odpowiedzi ułatwiająca kopiowanie i wklejanieźródło