Dans mon application, j'ai une vue de table. Lorsque l'utilisateur clique sur un bouton, un UIView recouvre une partie de cette vue tabulaire. C'est essentiellement un modal partiel. Cette vue de table est intentionnellement encore défilable lorsque ce modal est actif. Pour permettre à l'utilisateur de faire défiler vers le bas de la vue de la table, je change les valeurs contentInset et scrollIndicatorInsets pour ajuster la plus petite zone au-dessus du modal. Lorsque le modal est enlevé, je réinitialise ces valeurs d'incrustation. Le problème est que lorsque l'utilisateur a fait défiler vers le bas de l'insert nouvellement ajusté, puis rejette le modal, la vue de table saute brusquement à une nouvelle position de défilement parce que l'encart est changé instantanément. Je voudrais l'animer pour qu'il y ait une transition, mais les méthodes beginAnimation/commitAnimations ne l'affectent pas pour une raison quelconque.iPhone: impossible d'animer contentInset lors de l'animation Nav Bar afficher/masquer
Edit: En savoir plus. J'ai trouvé le conflit. Lors de la présentation du modal, je masque également la barre de navigation. La barre de navigation anime nativement la vue de la table de haut en bas telle qu'elle s'affiche et se cache. Lorsque j'arrête d'animer la barre de navigation, l'animation de l'encart fonctionne correctement. Est-ce que quelqu'un sait ce que je peux faire pour contourner ce conflit? Dois-je attendre la fin de l'animation de la barre de navigation avant de régler l'encart? Si oui, comment puis-je m'y accrocher?
Toute aide est grandement appréciée!
Le code correspondant du contrôleur de vue de la table est ici:
- (void)viewDidLoad {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(modalOpened) name:@"ModalStartedOpening" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(modalDismissed) name:@"ModalStartedClosing" object:nil];
[super viewDidLoad];
}
- (void)modalOpened {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
[UIView setAnimationDelegate:self];
self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 201, 0);
self.tableView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, 201, 0);
[UIView commitAnimations];
}
- (void)modalDismissed {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
[UIView setAnimationDelegate:self];
self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);
self.tableView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, 0, 0);
[UIView commitAnimations];
}