8
votes

Arrêter UitablesViewCells d'animation lors de l'animation d'une vision utile

Je vais animer un utableview. Je veux que la vue de la table soit glissante comme ceci:

http://www.youtube.com/watch?v= Xigjlbirsxe

Cependant, il s'ouvre comme ceci:

http://www.youtube.com/watch?v=ujux-ilcb_0

Notez comment les cellules de la table elles-mêmes sont animées. Comment puis-je arrêter cela de se produire?

J'utilise de l'autoliga. Le code est donc: xxx

Autres détails, qui peuvent ou peuvent ne pas avoir d'importance:

  • Le parent de la vue de la table est un ScrollView

  • J'ai remplacé la vue intrinsèque de la vue de table pour ramener la hauteur de toutes les cellules de la vue Table de la table, de sorte que la vue de la table ne défile pas

  • Je change la source de données de la vue Table avant de l'afficher


0 commentaires

4 Réponses :


0
votes

Avez-vous envisagé d'animer à la place une sous-évaluation opaque positionnée au-dessus de la vue Table de la table? XXX


1 commentaires

Je ne pense pas que cela fonctionnerait dans mon cas, car les sous-espions situées sous la table doivent également anéantir avec la table.



0
votes

Essayez d'abord de jeter la table, avant d'appeler [theView LayOUTIFNEED] à l'intérieur du bloc d'animation. Idéalement, vous pourriez mettre la mise en page au coup par coup et pour cette 0,33 secondes, vous pouvez obtenir une barre de défilement sur la table, mais l'objectif est d'obtenir la disposition de la cellule de table change en dehors du bloc d'animation.


0 commentaires

13
votes

J'ai eu un problème similaire et j'ai pu arrêter l'animation sur l'utableviewcell avec l'exécution UIVIEW EFFORTWithOUTANIMATION: CODE> Méthode.

Utilisez le TableView: WilldisplayCell: ForrowaTindexPath: Code> Méthode UitailViewelegate pour obtenir une référence à la cellule avant son affichage. Ensuite, dans le EFFACREWithOntimation: Code> Block, appelez Layoutifned code> sur l'objet de la cellule pour lui donner une occasion de mettre en page Ses sous-visVIEWS: P>

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [UIView performWithoutAnimation:^{
        [cell layoutIfNeeded];
    }];
}


0 commentaires

2
votes

Il serait peut-être trop tard pour répondre à cette question, mais le problème dans ce type de cas réside généralement dans le bloc d'animation capturant toutes les dispositions en attente planifiées dans la prochaine boucle d'exécution.

La solution que j'utilise est. J'appelle la mise en forme avant l'animation (avant de définir ou d'invalider toutes les contraintes), puis à l'intérieur du bloc d'animation. P>

Dans votre cas, il ressort quelque chose comme ça, P>

[theView addSubview:theTable];
[theTable reloadData];
[theView layoutIfNeeded];
[theTable invalidateIntrinsicContentSize];
[UIView animateWithDuration:.33 animations:^{
    [theView layoutIfNeeded];
 }];


0 commentaires