EDIT : J'ai initialement posé cette question en ce qui concerne le redimensionnement général des vues, mais je réalise maintenant qu'il s'agit de quelque chose de beaucoup plus spécifique aux tableViews.
Supposons qu'un tableView ait à l'origine un cadre de (0 0, 320 460), c'est-à-dire qu'il remplisse tout l'écran d'un iPhone. Afin de redimensionner la hauteur du tableView et d'animer ce redimensionnement, j'associe le code suivant à un bouton :
[UIView beginAnimations:@"Animation" context:nil];
[UIView setAnimationDuration:3];
CGRect rect = self.table.bounds;
rect.size = CGSizeMake(320, 200);
self.table.bounds = rect;
self.table.center = CGPointMake(160, 100);
[UIView commitAnimations];
Ce code va animer la hauteur de la table vers le bas, MAIS... avant que l'animation ne se produise, la table va couper toutes les cellules de la table qui ne rentreront pas dans les nouvelles limites. Ainsi, avec un tableView de 10 rangées à l'origine, le code d'animation ci-dessus provoquera cette séquence d'événements :
- Le tableView supprime immédiatement les 5 dernières rangées. Notez qu'il ne supprime que les rangées - l'arrière-plan du tableView s'étend toujours jusqu'au bas.
- Le tableView anime le changement de hauteur pour le reste du tableau comme prévu.
Ce n'est pas le comportement que je recherche. Au lieu de couper immédiatement les 5 rangées inférieures, le tableView devrait garder ses rangées en place pendant que le bord inférieur du tableau s'anime vers le haut.
D'après le comportement que je constate, il semble que le tableView reçoive une sorte de message l'invitant à rafraîchir ses lignes immédiatement après avoir appris que ses limites allaient changer. Quelqu'un peut-il m'éclairer sur ce comportement et me dire comment l'éviter ?