2014-10-02 9 views
11

Ho intenzione di creare una vista tabella con 2 sezioni al suo interno. Posso aggiungere celle ad ogni sezione di programmazione e quando aggiungo, ho scorrere fino alla fine del Tableview usandoiOS UITableView Scorrere fino alla fine della sezione

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

La mia domanda è come posso scorrere fino alla fine della sezione 0, in modo che quando l'utente aggiunge una cella nella sezione 0, tableview scorre dinamicamente fino all'ultima cella nella sezione 0.

grazie.

risposta

22

Si può provare con questo codice:

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

È possibile ottenere il numero di righe nella vostra sezione, quindi scorrere fino a che indexPath.

+0

Grazie, funziona come un fascino –

+0

Questo wil Ti do un indice fuori limite su quel numero di riga. Devi sottrarre 1 – Moriya

+1

Ricordati sempre di controllare se quella sezione esiste e avere più di quel numero di righe, o andrà in crash .. – Benetz

4

quando si inserisce riga alla fine si ha un percorso di indice, è possibile utilizzare il metodo di scrollToIndexPath Tableview per scorrere

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

Grazie, ha funzionato anche –

15

Tutti i suggerimenti sopra sono corrette, almeno sulla base dei documenti. Ma nel mio caso non ha funzionato: non ho potuto ottenere lo scroll per mostrare l'ultima riga nella vista tabella. Ho dovuto aggiungere un ritardo nello scorrimento per farlo funzionare.

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

ho chiamato il sopra come:

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

Grazie. Ho avuto un sacco di calcolo in una delle mie sezioni e nessuna soluzione di scorrimento avrebbe funzionato, tranne per questo. – wheeliez

+0

Grazie. Questa soluzione risolve il problema dell'ultima cella non visibile quando si scorre fino all'ultima cella. –

+0

Grazie mille per questo, provo un sacco ma non riesco a lavorare alcun codice ma il tuo codice funziona ancora per me. –

2

Solo nel caso, si tratta di una soluzione a 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

In Swift 3 è stato aggiornato a:

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