J'ai une application basée sur la navigation. La première vue (rootcontroller) commence avec seulement trois gros boutons. Pas de barre de navigation. À partir de là, tout le reste est des tables et des 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 pose sur le dessus de la table, plutôt que de la pousser vers le bas. Il coupe la partie supérieure de la table. Revenir au contrôleur racine n'est pas fluide dans la façon dont la barre de navigation disparaît. Existe-t-il un moyen plus simple/plus efficace de masquer la barre de navigation pour le contrôleur racine uniquement?
Vous pouvez utiliser [navigationController setNavigationBarHidden:YES animated:YES]
pour masquer la barre en douceur.
Ce petit code astucieux anime la barre de navigation sans aucun problème d'interface utilisateur:
[navigationController setNavigationBarHidden: YES animated:YES]
Vous pouvez personnaliser l'animation et la durée de la barre de navigation selon les méthodes suivantes. Il vous rappellera 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");
}];