2014-10-02 40 views
11

Przygotuję widok tabeli z 2 sekcjami. Mogę dodać komórki do każdej sekcji programowo i kiedy dodać, przewijać do końca tableview przy użyciuiOS UITableView Przewiń do dołu sekcji

[_tableView setContentOffset:CGPointMake(0, CGFLOAT_MAX)]; 

Moje pytanie brzmi jak mogę przewinąć do końca odcinka 0, tak, że gdy użytkownik dodać komórkę do sekcji 0, widok tabeli jest dynamicznie przewijany do ostatniej komórki w sekcji 0.

dziękuję.

Odpowiedz

22

Można spróbować z tym kodem:

int yourSection = 2; 
int lastRow = [tableView numberOfRowsInSection:yourSection] - 1; 
[tableView scrollToRowAtIndexPath:[NSIndexPath lastRow inSection:yourSection] atScrollPosition:UITableViewScrollPositionBottom animated:YES]; 

uzyskać liczbę wierszy w sekcji, a następnie przejdź do tego indexPath.

+0

Dzięki, działa jak urok –

+0

Ten wil Podam indeks poza zakresem tego numeru wiersza. Musisz odjąć 1 – Moriya

+1

Zawsze pamiętaj, aby sprawdzić, czy sekcja istnieje i mieć więcej niż liczbę wierszy, albo się zawiesi. – Benetz

4

podczas wstawiania wiersza na końcu masz swoją ścieżkę indeksu, można użyć metody scrollToIndexPath z tableview do przewijania

[self.liveChannelsTable scrollToRowAtIndexPath:IndexPath atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
+1

Dzięki, zadziałało również –

15

Wszystkie powyższe propozycje są prawidłowe, przynajmniej na podstawie dokumentów. Ale to nie zadziałało w moim przypadku - nie mogłem uzyskać przewijania, aby pokazać ostatni wiersz w widoku tabeli. Musiałem dodać opóźnienie przewijania, aby wykonać tę pracę.

- (void)scrollToTheBottom:(BOOL)animated 
{ 
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:rowCount-1 inSection:0]; 
    [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:animated]; 
} 

Zadzwoniłem wyżej jako:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
      [self scrollToTheBottom:YES]; 
}); 
+0

Dziękuję. Miałem dużo komputerów w jednej z moich sekcji i żadne rozwiązanie przewijania nie działałoby, z wyjątkiem tego. – wheeliez

+0

Dziękuję. Rozwiązania te rozwiązują problem braku widoczności ostatniej komórki podczas przewijania do ostatniej komórki. –

+0

Thnks a Lot za to, próbuję dużo, ale nie mogę pracować żadnego kodu, ale twój kod działa dla mnie thnks ponownie .. –

2

Tylko w przypadku, jest to rozwiązanie w Swift:

extension UITableView { 
    func scrollToBottom(animated: Bool = true) { 
     let sections = self.numberOfSections 
     let rows = self.numberOfRowsInSection(sections - 1) 
     self.scrollToRowAtIndexPath(NSIndexPath(forRow: rows - 1, inSection: sections - 1), atScrollPosition: .Bottom, animated: true) 
    } 
} 
1

w Swift 3 to zostało zaktualizowane do:

let indexPath = IndexPath(row: self.numberOfRowsInSection(0) - 1), section: 0) 
self.commentsTableView.scrollToRow(at: indexPath, at: .bottom, animated: false) 
Powiązane problemy