La structure (simplifiée) de mon application est la suivante:
UITabBarController
avec une UINavigationController
tenant une UITableViewController
en tant que contrôleur de vue racine.
lorsque vous appuyez sur l’une des cellules du contrôleur d’affichage de table, I Poussez une extrémité UIViewController
régulière (permet de l’appeler VC) en masquant la barre d’onglet inférieure. (en utilisant l'indicateur "Masquer la barre inférieure lorsque poussé")
Dans le storyboard, j'ai ajouté une sous-classe UIView
régulière à VC qui ressemble à une barre inférieure et j'utilise la mise en page automatique pour l'épingler au bas de la vue VC.
Le problème
Lorsque j'appuie sur VC, il faut une seconde pour que cette vue apparaisse au bas de la page. Cela ressemble à une mise en page automatique. La barre d'onglets est masquée et la déplace au bas de la vue.
Je sais que ce n'est pas la meilleure explication, alors j'ai ajouté un projet très simple pour illustrer le problème.
Le problème vient de cette contrainte spécifique qui se situe entre la vue et le haut du guide de disposition inférieur.
Sélectionnez la contrainte et éditez sa propriété "Second Item"
Ici vous devez choisir le fond
Une fois que vous avez cela, la vue rose n'est plus influencée par le guide de disposition. Le guide de disposition semble reconnaître que la barre d'onglets est masquée uniquement lorsque la vue racine du contrôleur de vue avancée est dans les limites de l'écran principal, ce qui ne se produit qu'une fois l'animation terminée.
Et c’est la raison pour laquelle la hiérarchie des vues doit être redéfinie, ce qui provoque l’animation indésirable.
La réponse acceptée ne fonctionnait pas pour moi (l'option n'était pas disponible). Cependant, j'ai trouvé une autre solution. (basé sur Masquer la barre inférieure lorsque poussé dans Autolayout )
Sélectionnez la vue et l'objet à aligner (dans mon cas btnShare) et ajoutez une nouvelle contrainte d'alignement (bords inférieurs).
Hi in Storyboard, sélectionnez Barre d'onglets (Est-ce que Contrôleur Barre d'onglets Scène> Contrôleur Barre d'onglets> Barre d'onglets), désélectionnez la case Translucide dans l'inspecteur d'attributs. Cette action résout votre problème. (Mais il y a beaucoup de choses, "Masquer la barre inférieure quand poussé" est à la barre d'outils).
Sélectionnez votre "Contrôleur de navigation" et dans "Inspecteur d'attributs", décochez la case "Sous les barres inférieures".
Si vous voulez que la barre d’onglet soit masquée, vous pouvez ajouter ce code à votre contrôleur,
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.tabBarController.tabBar.hidden = YES;
}
Vous devrez également mettre ce code (mais en passant NO) dans le contrôleur où vous voulez que la barre d'onglets soit visible. Vous devez également décocher la case "Masquer la barre inférieure lorsque vous êtes poussé" dans IB.
Après édition:
Vous obtiendrez une meilleure animation si, dans le premier contrôleur, vous animez la valeur alpha de la barre d’onglet non masquée de 0 à 1 sur une courte période. Cela a l'air bien si vous revenez en arrière avec le bouton de retour. Si vous souhaitez utiliser le balayage arrière, vous devrez faire quelque chose de plus compliqué avec interactivePopGestureRecognizer.
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.tabBarController.tabBar.hidden = NO;
self.tabBarController.tabBar.alpha = 0.0;
[UIView animateWithDuration:.4 animations:^{
self.tabBarController.tabBar.alpha = 1.0;
}];
}
définir UINavigationBar Translucent avec NO.
comme ceci: self.navigationController.navigationBar.translucent = NO;
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.tabBarController.tabBar.hidden = NO;
self.tabBarController.tabBar.alpha = 0.0;
[UIView animateWithDuration:.3 animations:^{
self.tabBarController.tabBar.alpha = 5.0;
}];
}
Essayez d’épingler le bas de votre vue en bas de la vue d'ensemble et non en bas