2015-03-28 3 views
19

Ho cercato di risolvere questo problema troppo comune di un UITextView in espansione in uno UITableViewCell in crescita di uno UITableView e ci sono quasi eccetto per una piccola cosa.UITableView beginUpdate/endUpdate che causa lo scorrimento verso l'alto

Ho un UITableView che ha un UITableViewCell personalizzato. Il mio UITableView utilizza la nuova altezza della cella dinamica con ridimensionamento automatico di iOS8 con l'aiuto di self.tableView.estimatedRowHeight e self.tableView.rowHeight = UITableViewAutomaticDimension;, che aumenta l'altezza della cella in base al layout automatico di ContentView.

posso crescere bene mio 'telaio S e le mie UITableView' UITextField s altezza della cella effettivamente crescere, ma ogni volta che ho chiamato self.tableView beginUpdates e il corrispettivo endUpdates, tutta la mia vista di scorrimento del tableView costringe un rotolo alla parte superiore del vista tabella. Ho un metodo che scorre alla posizione del cursore, ma come puoi immaginare, ogni volta che viene creata una nuova riga in UITextView, l'UITableView scorre verso l'alto e quindi verso la posizione del cursore, ed è janky da morire.

Qualcuno ha qualche idea? Posso fornire un video se necessario. Cheers, Mike

+0

Eventuali duplicati di [scatti scorrimento dopo l'aggiornamento UITableViewCell in posizione con UITableViewAutomaticDimension] (http://stackoverflow.com/questions/27996438/jerky-scrolling-after-updating-uitableviewcell-in-place-with-uitableviewautomati) – Emilio

risposta

23

Questo mi ha fatto bene, e sembra che il problema sia self.tableView.estimatedRowHeight. Quando ho fatto la stima abbastanza grande il problema ha smesso di accadere.

ho aggiunto questo invece e che sta funzionando bene finora:

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    return UITableViewAutomaticDimension; 
} 
+1

Cosa c'è il tuo setup? Ho reso la stima RoughHeight super grande e ha comunque visualizzato questo comportamento. Il tuo esempio di codice non sembra funzionare anche per me. – micnguyen

+0

Questo ha funzionato per me come un fascino. Venerato !!! – NSPratik

+7

Ho usato un valore di 1000 e ha funzionato. Sono preoccupato per l'utilizzo di UITableViewAutomaticDimension poiché sembra essere usato per indicare tramite un valore di ritorno dell'altezza della riga effettiva (tableView.rowHeight o tableView: heightForRowAtIndexPath :) che il sistema dovrebbe utilizzare il EstimateRowHeight per dimensionare le celle prima che l'autolayout abbia avuto la possibilità di calcola la taglia. Sembra che potrebbe funzionare solo per caso nel tuo caso. Il valore è -1 nel debugger e non funziona per me. –

5

Non posso commentare akiraspeirs risposta, ma l'impostazione della self.tableView.estimatedRowHeight per l'altezza esatta della mia cella prima qualsiasi ridimensionamento accade sbarazzato dello strano problema di scorrimento. La sua seconda soluzione non ha funzionato nel mio caso.