Comment masquer le bouton "Retour" sur la barre de navigation sur iPhone?
-
03-07-2019 - |
Question
J'ai ajouté un contrôle de navigation pour basculer entre les vues de mon application. Mais certaines vues ne devraient pas avoir le bouton "Retour" (le titre précédent). Des idées sur la façon de cacher le bouton retour?
La solution
Objective-C:
self.navigationItem.hidesBackButton = YES;
Swift:
navigationItem.hidesBackButton = true
Autres conseils
Le meilleur moyen est de les combiner pour masquer le bouton Précédent même si vous le configurez manuellement:
self.navigationItem.leftBarButtonItem=nil;
self.navigationItem.hidesBackButton=YES;
bouton de masquage arrière avec le code ci-dessous ...
[self.navigationItem setHidesBackButton:YES animated:YES];
ou
[self.navigationItem setHidesBackButton:YES];
De même, si vous avez personnalisé UINavigationBar
, essayez le code ci-dessous
self.navigationItem.leftBarButtonItem = nil;
Utilisez le code:
self.navigationItem.backBarButtonItem=nil;
Dans Swift :
Ajoutez ceci au contrôleur
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.setHidesBackButton(true, animated: false)
}
Dans la fonction viewDidLoad de UIViewController, utilisez le code:
self.navigationItem.hidesBackButton = YES;
N'oubliez pas que vous devez l'appeler sur l'objet doté du contrôleur de navigation. Par exemple, si un contrôleur de navigation pousse un contrôleur avec un RootViewController sur la barre d'onglets, l'appel de self.navigationItem.hidesBackButton = YES
sur le RootViewController ne fera rien. Vous devrez en fait appeler self.tabBarController.navigationItem.hidesBackButton = YES
N'oubliez pas que nous avons maintenant le geste de glisser vers l'arrière. Vous voulez probablement supprimer cela aussi. N'oubliez pas de le réactiver si nécessaire.
if ([self.navigationItem respondsToSelector:@selector(hidesBackButton)]) {
self.navigationItem.hidesBackButton = YES;
}
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
Ajoutez ce code dans votre contrôleur de vue
UIView *myView = [[UIView alloc] initWithFrame: CGRectMake(0, 0, 300, 30)];
UIBarButtonItem *btnL = [[UIBarButtonItem alloc]initWithCustomView:myView];
self.navigationItem.leftBarButtonItem = btnL;
Pour moi, rien de ce qui précède ne semblait fonctionner, cela n’avait aucun effet visuel. J'utilise des storyboards avec une vue "intégrée". dans un contrôleur de navigation.
Au niveau du code, j'ajoute mes éléments de menu et, pour une raison quelconque, l'onglet "backButton". est visible lors du débogage visuel de la hiérarchie des vues et mon icône menuItem s’affiche sous l’invisible "bouton Précédent".
J'ai essayé les paramètres, comme suggéré dans les différentes méthodes de hook et cela n'a eu aucun effet. Ensuite, j'ai essayé une approche plus brutale et une itération sur la sous-vue, qui n'a également eu aucun effet.
J'ai inspecté la taille de mes icônes et tout s'est bien passé. Après avoir fait référence à la directive d'interface humaine Apple, j'ai confirmé que mes icônes étaient correctes. (1 pixel plus petit dans mon cas 24px 48px 72px).
La partie la plus étrange est alors la solution réelle ...
Lors de l'ajout de l'élément BarButton, attribuez-lui un titre avec au moins un caractère , dans mon cas un caractère d'espacement.
Espère que cela aide quelqu'un.
//left menu - the title must have a space
UIBarButtonItem *leftButtonItem = [[UIBarButtonItem alloc] initWithTitle:@" " <--THE FIX
style:UIBarButtonItemStylePlain
target:self
action:@selector(showMenu)];
leftButtonItem.image = [UIImage imageNamed:@"ic_menu"];
[self.navigationItem setLeftBarButtonItem:leftButtonItem];
Cela ne fonctionnait pas pour moi dans tous les cas quand je mets
self.navigationItem.hidesBackButton = YES;
dans viewWillAppear ou ViewDidLoad, mais a parfaitement fonctionné lorsque je l'ai défini dans init du viewController.
essayez celui-ci -
self.navigationController? .navigationItem.hidesBackButton = true
En c # ou Xamarin.ios, this.NavigationItem.HidesBackButton = true;