J’ai une application basée sur la navigation. La première vue (rootcontroller) ne commence que par trois gros boutons. Pas de barre de navigation. À partir de là, tout le rest est constitué de tables et de barres de navigation. Je fais cela pour afficher / masquer la barre de navigation:
MyAppAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; appDelegate.navigationController.navigationBar.hidden = NO;
Une fois que je quitte le contrôleur racine, la barre de navigation se met en place et se place sur la table plutôt que de la pousser vers le bas. Il coupe la partie supérieure de la tableview. Revenir au contrôleur racine n’est pas fluide dans la manière dont la barre de navigation disparaît. Existe-t-il un moyen plus simple / plus efficace de masquer la barre de navigation du contrôleur racine uniquement?
Vous pouvez utiliser [navigationController setNavigationBarHidden:YES animated:YES]
pour masquer la barre en douceur.
Référence
Ce code astucieux anime le masquage de la barre de navigation sans problèmes d’interface:
[navigationController setNavigationBarHidden: YES animated:YES]
Vous pouvez personnaliser l’animation et la durée de la barre de navigation à l’aide des méthodes suivantes. Il vous fournira un rappel une fois l’animation terminée.
// pass a param to describe the state change, an animated flag and a completion block matching UIView animations completion - (void)setNavigationBarVisible:(BOOL)visible animated:(BOOL)animated completion:(void (^)(BOOL))completion { // fail if the current state matches the desired state if ([self navigationBarIsVisible] == visible) return completion(YES); // get a frame calculation ready CGFloat nheight = self.navigationController.navigationBar.frame.size.height; CGFloat noffsetY = (visible)? -nheight : nheight; // zero duration means no animation CGFloat duration = (animated)? 0.3 : 0.0; [UIView animateWithDuration:duration animations:^{ CGRect nframe = self.navigationController.navigationBar.frame; self.navigationController.navigationBar.frame = CGRectOffset(nframe, 0, noffsetY); } completion:completion]; } // know the current state of the navigation bar - (BOOL)navigationBarIsVisible { return self.navigationController.navigationBar.frame.origin.y < CGRectGetMinY(self.view.frame); } // Show or Hide navigation bar [self setNavigationBarVisible:![self navigationBarIsVisible] animated:YES completion:^(BOOL finished) { NSLog(@"navigation bar finished"); }];