Come si possono inserire righe in un UITableView
nella parte superiore senza che il resto delle celle venga spostato verso il basso - quindi la posizione di scorrimento non sembra cambiare affatto?Inserire le righe nella parte superiore di UITableView senza modificare la posizione di scorrimento quando si utilizza UITableViewAutomaticDimension
Proprio come Facebook e Twitter quando vengono inviati nuovi messaggi, questi vengono inseriti nella parte superiore ma la posizione di scorrimento rimane fissa.
La mia domanda è simile a questa this question. Ciò che rende unica la mia domanda da quella domanda è che non sto usando una tabella con altezze di riga fisse - Sto usando UITableViewAutomaticDimension
e un estimatedRowHeight
. Pertanto le risposte suggerite non funzioneranno perché non riesco a determinare l'altezza della riga.
Ho provato questa soluzione che non considera l'altezza della riga in considerazione, ma il contentSize
non è ancora corretto dopo il ricaricamento, perché il set contentOffset
non è la stessa posizione relativa - le celle sono ancora spinte verso il basso dove erano prima dell'inserto. Questo perché la cella non è stata renderizzata sullo schermo, quindi iOS non si preoccupa di calcolare l'altezza appropriata per esso fino a quando non sta per apparire, quindi contentSize
non è preciso.
CGSize beforeContentSize = tableView.contentSize;
[tableView reloadData];
CGSize afterContentSize = tableView.contentSize;
CGPoint afterContentOffset = tableView.contentOffset;
tableView.contentOffset = CGPointMake(afterContentOffset.x, afterContentOffset.y + afterContentSize.height - beforeContentSize.height);
Alain indicate rectForCellAtIndexPath
che costringe IOS per calcolare l'altezza adeguata. Ora posso determinare l'altezza corretta per le celle inserite, ma la vista di scorrimento contentSize
non è ancora corretta, come si evince quando eseguo un'iterazione su tutte le celle e sommando le altezze che sono maggiori di contentSize.height
. Alla fine, quando imposto manualmente lo contentOffset
, non si sta scorrendo nella posizione corretta.
Codice originale:
//update data source
[tableView beginUpdates];
[tableView insertRowsAtIndexPaths:newIndexPaths withRowAnimation:UITableViewRowAnimationAutomatic];
[tableView endUpdates];
In questo scenario, cosa si può fare per ottenere il comportamento desiderato?
hai trovato una soluzione? –
@AndreyGordeev No. Ho finito per non utilizzare più l'altezza stimata delle righe e invece di calcolare manualmente l'altezza necessaria per ogni riga. – Joey
Come sei riuscito a gestire il problema ContentSize errato? – goldengil