76 votes

Comment masquer une barre de navigation dans un contrôleur de vue particulier ?

J'ai créé une application iPhone avec deux écrans d'accueil. Ensuite, l'utilisateur est amené à la première vue. J'ai ajouté un UINavigationController. Il fonctionne parfaitement bien.

Comment supprimer la barre de navigation pour la seule vue d'ouverture ?

MainWindow

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

self.splashScreen = [[SplashScreen alloc] 
                initWithNibName:@"SplashScreen" 
                bundle:nil];
if (self.pageController == nil) {
openingpage *page=[[openingpage alloc]initWithNibName:@"openingpage" bundle:[NSBundle mainBundle]];
    self.pageController = page;
    [page release];
}
[self.navigationController pushViewController:self.pageController animated:YES];

[window addSubview:splashScreen.view];

 [splashScreen displayScreen];
[self.window makeKeyAndVisible];

return YES;
 }

163voto

beryllium Points 18138

Essayez cette méthode dans un contrôleur de vue :

// swift
self.navigationController?.setNavigationBarHidden(true, animated: true)

// objective-c
[self.navigationController setNavigationBarHidden:YES animated:YES]; 

Plus de clarifications :

UINavigationController possède une propriété navigationBarHidden, qui vous permet de masquer/afficher la barre de navigation pour l'ensemble du contrôleur de navigation.

Examinons la hiérarchie suivante :

--UINavigationController
------UIViewController1
------UIViewController2
------UIViewController3

Chacun des trois UIViewController a la même barre de navigation puisqu'ils sont dans le UINavigationController. Par exemple, si vous voulez cacher la barre pour le UIViewController2 (en fait, peu importe dans lequel), écrivez dans votre UIViewController2 :

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:YES animated:YES];   //it hides the bar
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [self.navigationController setNavigationBarHidden:NO animated:YES]; // it shows the bar back
}

1 votes

Bien que cette réponse donne un résultat adéquat, la vue d'ouverture/écran d'éclatement ne fait pas partie de la hiérarchie du contrôleur de navigation et ne devrait donc pas vraiment s'y trouver.

2 votes

Ce que je veux, c'est masquer la barre de navigation uniquement pour la première "vue d'ouverture". l'utilisation de ce qui précède masque l'ensemble de la barre de navigation des fichiers liés au premier contrôleur de vue.

0 votes

@kingston, alors montre-le encore une fois [self.navigationController setNavigationBarHidden:NO]; dans viewWillDisappear par exemple :)

22voto

Doe Jane Points 221

Swift 4 :

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(true)
    navigationController?.setNavigationBarHidden(true, animated: true)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(true)
    navigationController?.setNavigationBarHidden(false, animated: false)
}

6voto

Dimitrios Points 61

Cela a fonctionné pour moi :

Swift 4

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationController?.setNavigationBarHidden(true, animated: false)
}

//reappears navigation bar on next page
override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    navigationController?.setNavigationBarHidden(false, animated: true)
}

1voto

Sudhir kumar Points 1

Utilisez le code ci-dessous pour cacher la barre de navigation dans Swift3 et Swift4.

navigationController?.setNavigationBarHidden(true, animated: true)

Pour afficher la barre de navigation

navigationController?.setNavigationBarHidden(false, animated: true)

1voto

Alexey Malyarenko Points 161

Il est préférable de se souvenir s'il a été caché auparavant :

private var navigationBarWasHidden = false

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    // Save if it was hidden initially
    self.navigationBarWasHidden = self.navigationController?.isNavigationBarHidden ?? false
    // Hide the Navigation Bar
    self.navigationController?.setNavigationBarHidden(true, animated: animated)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)

    // Show the Navigation Bar
    self.navigationController?.setNavigationBarHidden(self.navigationBarWasHidden, animated: animated)
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X