J'ai une tableView dans laquelle j'insère des lignes en haut.
Pendant que je fais cela, je veux que la vue actuelle reste complètement immobile, de sorte que les rangées n'apparaissent que si vous faites défiler vers le haut.
J'ai essayé de sauvegarder la position actuelle de la vue UIScroll sous-jacente et de réinitialiser la position après l'insertion des rangées, mais cela donne lieu à une oscillation, de haut en bas, bien qu'elle finisse par revenir au même endroit.
Existe-t-il un bon moyen d'y parvenir ?
Mise à jour : j'utilise beginUpdate, puis insertRowsAtIndexPath, endUpdates. Il n'y a pas d'appel reloadData.
scrollToRowAtIndexPath saute au sommet de la cellule actuelle (enregistrée avant l'ajout de lignes).
L'autre approche que j'ai essayée, qui se termine en exactement le bon rythme, mais avec un judder est.
save tableView currentOffset. (Underlying scrollView method)
Add rows (beginUpdates,insert...,endUpdates)
reloadData ( to force a recalulation of the scrollview size )
Recalculate the correct new offset from the bottom of the scrollview
setContentOffset (Underlying scrollview method)
Le problème est que le reloadData provoque un bref défilement de la vue de défilement/tableau, puis le setContentOffset la ramène au bon endroit.
Existe-t-il un moyen de faire en sorte qu'une tableView détermine sa nouvelle taille sans lancer l'affichage ?
Envelopper le tout dans un beginAnimation commitAnimation n'aide pas beaucoup non plus.
Mise à jour 2 : Cela peut clairement être fait - voir l'application officielle de Twitter pour un lorsque vous tirez vers le bas pour les mises à jour.