10
votes

iPhone UitailView Ajouter un contenu en haut sans défilement

J'ai un journal défilant potentiellement très long de messages dans une vision utile, l'utilisateur serait capable de naviguer sur la table en faisant défiler.

Qu'est-ce que j'essaie de faire est d'ajouter un nouveau contenu en haut de la table. Si le haut de la table est visible , la nouvelle ligne pousserait le reste du contenu en bas sur . Mais si la première rangée de la table est non visible , la table ajoutait silencieusement une autre rangée sur le dessus sans défilement.

Je fais cela pour empêchez la table de défilement au sommet d'interrompre les données d'utilisateur de navigation. Si je demande à la table de faire défiler simplement le nouveau point d'insertion, la position de l'utilisateur dans la table serait perdue, frustrant l'utilisateur.

L'une des façons que je puisse essayer de mettre en œuvre ceci est par insérer des données dans un nsmutableArray à l'index 0. Est-ce que cela fonctionnerait-il? Une question supplémentaire: combien coûte-t-on l'insertion de données au début d'une nsmutableArray . Je m'attendrais à ce que cette opération soit optimisée, mais voudrait s'assurer. Qu'est-ce que je manque avec cette implémentation?

Merci!


3 Réponses :



2
votes

Vient de poster une réponse avec des extraits de code ici

Gardez UitailView statique lorsque vous insérez des rangées à le haut

Fondamentalement:

  • Enregistrez le décalage de défilement où vous auriez appelé BeginUpdate :.
  • à la place des appels pour insérer, vous ajoutez la hauteur de la cellule au décalage enregistré.
  • où vous auriez appelé endupdate :, appelez Reloaderdata, puis faites défiler par le décalage enregistré sans animation.

0 commentaires

6
votes
CGSize beforeContentSize = self.tableView.contentSize;
[self.tableView reloadData];
CGSize afterContentSize = self.tableView.contentSize;
            
CGPoint afterContentOffset = self.tableView.contentOffset;
CGPoint newContentOffset = CGPointMake(afterContentOffset.x, afterContentOffset.y + afterContentSize.height - beforeContentSize.height);
self.tableView.contentOffset = newContentOffset;

0 commentaires