Après avoir exécuté mon application sous iOS 8 (XCode 6.0.1, iPhone 6), le bouton Retour ne se cache pas.
Mon code:
- (void)removeCategoriesButton
{
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
[_navigationController.topViewController.navigationItem setHidesBackButton:YES];
[_navigationController.topViewController.navigationItem setLeftBarButtonItem:nil];
} else {
UIViewController *controller = _app.window.rootViewController;
if ([controller isKindOfClass:[UINavigationController class]]) {
UINavigationController *nav = (UINavigationController *)controller;
[nav.topViewController.navigationItem setHidesBackButton:YES];
[nav.topViewController.navigationItem setLeftBarButtonItem:nil];
}
}
}
Mais le bouton de retour ne cache pas (voir capture d'écran):
UPD:
Je lance l'application dans un autre simulateur, et je vois ce "bug" uniquement sur iOS 8.
Cela a fonctionné pour moi.
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationItem setHidesBackButton:YES];
[self.navigationItem setTitle:@"Home"];
}
J'ai essayé beaucoup de réponses mais le seul qui a fonctionné pour moi a été:
override func viewDidLoad() {
super.viewDidLoad()
let backButton = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.Plain, target: navigationController, action: nil)
navigationItem.leftBarButtonItem = backButton
}
Appelez votre ViewDidLoad avec la méthode suivante:
Objectif c:
self.navigationItem.leftBarButtonItem = nil;
ou
self.navigationItem.hidesBackButton = YES;
Rapide:
navigationItem.hidesBackButton = true
Rapide:
self.navigationItem.hidesBackButton = true
J'ai constaté que cela était dû au fait de placer une nouvelle vue dans viewWillAppear. Si je la déplaçais pour viewDidAppear, le bouton Précédent ne s'affichait pas. Étrange que ce problème ne soit apparu que dans iOS8.
Essaye ça:
[self.navigationItem setHidesBackButton:YES];
for (UIView *view in self.navigationController.navigationBar.subviews)
{
NSString *name = [NSString stringWithFormat:@"%@",view.class];
if ([name isEqualToString:@"UINavigationItemButtonView"] || [name isEqualToString:@"_UINavigationBarBackIndicatorView"]) {
[view setHidden:YES];
}
}
Essayez d'utiliser self.navigationItem.hidesBackButton = true
dans la méthode viewWillAppear()
, cela a fonctionné pour moi.
Masquer le bouton Précédent à l'aide de setHidesBackButton ne fonctionne que si vous n'avez pas personnalisé le bouton.
A partir de la référence de la méthode: "Spécifiez la valeur true si le bouton Précédent doit être masqué lorsque l'élément de navigation est l'élément supérieur. Spécifiez la valeur False si le bouton Précédent doit être visible, en supposant qu'il n'ait pas été remplacé par un élément personnalisé." .__ ( Notez la dernière ligne)
Dans ce cas, la solution la plus simple consiste à régler d'abord leftBarButtonItem sur nil.
Swift 3.0:
self.navigationItem.leftBarButtonItem = nil
self.navigationItem.setHidesBackButton(true, animated: false)
Où avez-vous écrit ce code?
Cela devrait être aussi simple que dans la méthode loadView/viewDidLoad: de votre contrôleur de vue en ajoutant ceci
[self.navigationItem setHidesBackButton:YES];
Cela fonctionne pour moi sur un iPhone 6
Le seul moyen que j’ai trouvé est de masquer la barre de navigation, d’ajouter une barre de navigation dans le storyboard et de réafficher la barre de navigation dans le prochain ViewController. Tout ce que j'avais à faire, c'était d'ajouter une étiquette dans la barre d'état afin que la barre de navigation soit uniforme. Je n'ai trouvé aucun autre moyen ...
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:YES];
[[self navigationController] setNavigationBarHidden:YES animated:YES];
}
de sorte que la barre de navigation soit affichée dans le prochain contrôleur, déclarez dans:
- (void)viewWillDisappear:(BOOL)animated
{
[[self navigationController] setNavigationBarHidden:NO animated:YES];
}
Ce bogue ne survient que lorsque vous utilisez Storyboard. Une autre solution consiste à ajouter un UIBarButtonItem avec un titre vide pour le "simuler".