web-dev-qa-db-fra.com

iOS 8: bouton masquer le retour UINavigationController

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):

Simulator screen

UPD:

Je lance l'application dans un autre simulateur, et je vois ce "bug" uniquement sur iOS 8.

18
ZhukV

Cela a fonctionné pour moi. 

-(void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];

    [self.navigationItem setHidesBackButton:YES];
    [self.navigationItem setTitle:@"Home"];
}
45
scrainie

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
}
14
eric f.

Appelez votre ViewDidLoad avec la méthode suivante:

Objectif c:

self.navigationItem.leftBarButtonItem = nil;

ou

self.navigationItem.hidesBackButton = YES;

Rapide:

navigationItem.hidesBackButton = true
6
LS_

Rapide: 

self.navigationItem.hidesBackButton = true
4
William Hu

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.

3

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];
    }
}
2
Chun-Wei Chen

Essayez d'utiliser self.navigationItem.hidesBackButton = true dans la méthode viewWillAppear(), cela a fonctionné pour moi.

1
Array

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)
1
Nico teWinkel

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

1
SomeGuy

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 ...

screen

- (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];

}
0
oscar castellon

Ce bogue ne survient que lorsque vous utilisez Storyboard. Une autre solution consiste à ajouter un UIBarButtonItem avec un titre vide pour le "simuler". 

0
Yue-Hsun Lin