Ho un UITableView con una cella che è dimensionata dinamicamente per adattarsi a UITextView al suo interno. Ogni volta che viene digitata una chiave, la cella controlla se l'altezza calcolata è aumentata, come con una nuova linea, in modo che possa indicare alla tabella che l'altezza della cella deve essere ricalcolata. Lo faccio con questo codice.UITableView Scorre in alto nella cella Aggiorna
- (void) createNoteCellViewDidUpdate: (CreateNoteCell*) cell {
CGFloat newHeight = [self tableView:self.tableView heightForRowAtIndexPath:CreateNoteCellIndexPath];
if (newHeight != CGRectGetHeight(cell.contentView.frame)) {
[self.tableView beginUpdates];
[self.tableView endUpdates]; // <- HERE IS WHERE THE CONTENT OFFSET CHANGES
}
}
I limiti di ridimensionamento e tabella sono come previsto. Ma invece di animare solo il cambiamento di altezza, scorre anche verso l'alto. Questo può essere visto qui, quando si preme il tasto Invio.
Con Chiave Valore Observing, ho scoperto che il contentOffset vista di scorrimento viene impostata quando cambia contentSize della vista di scorrimento. E che contentSize cambia molte volte quando viene chiamato il metodo endUpdates. Quando cambia, passa da un'altezza normale a un'altezza piuttosto grande, quindi torna a un'altezza normale. Mi chiedo se per questo andrà a finire. Non so da dove andare.
Domanda: perché stai tentando di ridimensionare il tuo tableview invece di ridimensionare la cella? Normalmente il frame di un tableview rimane costante e le modifiche del contenuto. – Frankie
No, non sto toccando il frame oi limiti di Table View.Sto ridimensionando la cella dicendo alla vista tabella per ricalcolare tutte le altezze delle celle. – Jadar