Je vais animer un utableview. Je veux que la vue de la table soit glissante comme ceci:
http://www.youtube.com/watch?v= Xigjlbirsxe p>
Cependant, il s'ouvre comme ceci: p>
http://www.youtube.com/watch?v=ujux-ilcb_0 p>
Notez comment les cellules de la table elles-mêmes sont animées. Comment puis-je arrêter cela de se produire? P>
J'utilise de l'autoliga. Le code est donc: p> Autres détails, qui peuvent ou peuvent ne pas avoir d'importance: p> Le parent de la vue de la table est un ScrollView P> LI>
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 p> li>
Je change la source de données de la vue Table avant de l'afficher P> Li>
ul> p>
4 Réponses :
Avez-vous envisagé d'animer à la place une sous-évaluation opaque positionnée au-dessus de la vue Table de la table?
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.
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. P>
J'ai eu un problème similaire et j'ai pu arrêter l'animation sur l'utableviewcell avec l'exécution UIVIEW Utilisez le EFFORTWithOUTANIMATION: CODE> Méthode.
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];
}];
}
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]; }];