W widoku tabeli muszę przewijać do góry. Ale nie mogę zagwarantować, że pierwszym obiektem będzie sekcja 0, wiersz 0. Może być tak, że mój widok tabeli rozpocznie się od sekcji 5.
Dostaję więc wyjątek, kiedy dzwonię:
[mainTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
Czy istnieje inny sposób przewijania do góry widoku tabeli?
ios
uitableview
Ilya Suzdalnitski
źródło
źródło
self.tableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: UITableViewScrollPosition.top, animated: true)
wydaje się działać w iOS 11Uwaga : ta odpowiedź nie jest ważna dla iOS 11 i nowszych.
wolę
Jeśli masz górną wstawkę w widoku tabeli, musisz ją odjąć:
źródło
tableView
niezerowecontentInset
od góry. Na przykład:tableView.contentInset = UIEdgeInsetsMake(5.0f, 0.0f, 250.0f, 0.0f);
. Jeśli tak jest, w kodzietableView
przewija się do(0.0f, 5.0f)
.[tableView setContentOffset:CGPointMake(0.0f, -tableView.contentInset.top) animated:YES];
-scrollView.adjustedContentInset.top
zamiast tego.Możliwe działania:
1
2)
3)
4
5
Wyłącz przewijanie do góry:
Zmodyfikuj i użyj go zgodnie z wymaganiami.
Szybki 4
źródło
Lepiej nie używać NSIndexPath (pusta tabela), ani nie zakładać, że najwyższym punktem jest CGPointZero (wstawki zawartości), tego właśnie używam -
Mam nadzieję że to pomoże.
źródło
Swift 4 :
Działa to bardzo dobrze:
źródło
UITableViewStyleGrouped
(nagłówki przewijane z zawartością) i ten kod działa. Upewnij się, że jesteś w głównym wątku i uruchamiasz ten kod po wyświetleniu widoku (viewDidAppear
). Jeśli nadal masz problemy, spróbuj umieścić kod w tym:DispatchQueue.main.asyncAfter(deadline: .now()+0.1, execute: { // the code }
Wystąpił problem podczas wywoływania niektórych metod na pustym
tableView
. Oto kolejna opcja dla Swift 4, która obsługuje puste widoki tabeli.Stosowanie:
źródło
NIE UŻYWAJ
Czasami może nieprawidłowo ustawić przesunięcie. Na przykład w moim przypadku komórka znajdowała się nieco powyżej widoku z wypustkami obszaru bezpiecznego. Niedobrze.
ZAMONTUJ UŻYCIE
źródło
W systemie iOS 11 użyj przycisku,
adjustedContentInset
aby poprawnie przewinąć do góry w obu przypadkach, gdy pasek stanu podczas połączenia jest widoczny lub nie.Szybki:
źródło
Dla tabel, które mają
contentInset
, ustawienie przesunięcia zawartości naCGPointZero
nie będzie działać. Przewinie do góry zawartości vs. do góry.Biorąc pod uwagę zawartość wstawia to zamiast tego:
źródło
Ten kod pozwala przewinąć określoną sekcję do góry
źródło
Szybki:
źródło
Szybki 3
gdyby
tableView.setContentOffset
nie działa.Posługiwać się:
źródło
Ponieważ mój
tableView
jest pełen wszelkiego rodzaju wypustek, była to jedyna rzecz, która działała dobrze:Szybki 3
Swift 2
źródło
Dodając do tego, co już powiedziano, możesz utworzyć rozszerzenie (Swift) lub kategorię (Cel C), aby ułatwić to w przyszłości:
Szybki:
Za każdym razem, gdy chcesz przewinąć dowolną tabelę Wyświetl na górę, możesz wywołać następujący kod:
źródło
Wolę następujące, ponieważ uwzględnia wstawkę. Jeśli nie ma wstawki, nadal będzie przewijana do góry, ponieważ wstawka będzie wynosić 0.
źródło
Szybki:
jeśli nie masz nagłówka tableView:
jeśli tak:
źródło
Swift 5, iOS 13
Wiem, że to pytanie ma już wiele odpowiedzi, ale z mojego doświadczenia wynika, że tylko jedna metoda zawsze działa:
tableView.scrollToRow(at: IndexPath(row: someArray.count - 1, section: 0), at: .bottom, animated: true)
Jeśli pracujesz w trybie asynchronicznym, tabele animowane za pomocą klawiatury itp., Inne odpowiedzi często przewijają się do prawie do dołu, a nie do absolutnego dołu. Ta metoda za każdym razem doprowadzi cię do absolutnego końca tabeli.
źródło
Oto, czego używam do prawidłowego działania w systemie iOS 11:
źródło
W Swift 5 bardzo dziękuję za odpowiedź Adriana
Stosowanie:
źródło
Korzystanie z contentOffset nie jest właściwą drogą. byłoby to lepsze, ponieważ jest to naturalny sposób widoku tabeli
źródło
To był jedyny fragment kodu, który działał dla mnie
Swift 4:
PS 70 to wysokość mojej komórki widoku nagłówka i tabeli
źródło
wywołać tę funkcję, gdziekolwiek chcesz UITableView przewiń do góry
źródło
Swift 4 przez rozszerzenie, obsługuje widok pustej tabeli:
źródło
Używam tabBarController i mam kilka sekcji w widoku tabeli na każdej karcie, więc jest to dla mnie najlepsze rozwiązanie.
źródło
Musiałem dodać pomnożenie
-1 *
do sumy paska stanu i paska nawigacji, ponieważ schodziła o tę wysokość z ekranu,źródło
w szybkim tempie
Twój wiersz = selectioncellRowNumber twoja sekcja jeśli masz = selectionNumber jeśli nie masz ustawionego, to zero
//UITableViewScrollPosition.Middle lub Bottom or Top
źródło
Oto kod do przewijania ScrollTableView do góry Programowo
Szybki:
źródło
W Swift-3:
źródło
Jeśli chcesz przenieść animację przewijania w tabeli, użyj tego kodu. Przewiń do góry z animacją za 0,5 sekundy.
źródło
Z Swift:
źródło