web-dev-qa-db-fra.com

Comment masquer/afficher la barre de tabulation d'une vue avec une barre de navigation dans iOS?

J'ai des vues avec une barre de navigation et une barre d'onglets. Ce que je voudrais, c'est masquer la barre d'onglets sur une vue donnée et l'afficher à nouveau lorsque l'utilisateur change de vue.

J'ai vu un extrait de code pour cacher la barre de tabulation:

-(void)makeTabBarHidden:(BOOL)hide
{
    // Custom code to hide TabBar
    if ( [tabBarController.view.subviews count] < 2 ) {
        return;
    }

    UIView *contentView;

    if ( [[tabBarController.view.subviews objectAtIndex:0] isKindOfClass:[UITabBar class]] ) {
        contentView = [tabBarController.view.subviews objectAtIndex:1];
    } else {
        contentView = [tabBarController.view.subviews objectAtIndex:0];
    }

    if (hide) {
        contentView.frame = tabBarController.view.bounds;       
    }
    else {
        contentView.frame = CGRectMake(tabBarController.view.bounds.Origin.x,
             tabBarController.view.bounds.Origin.y,
             tabBarController.view.bounds.size.width,
             tabBarController.view.bounds.size.height - tabBarController.tabBar.frame.size.height);
    }

    tabBarController.tabBar.hidden = hide;
}

à partir de: http://nickwaynik.com/iphone/hide-tabbar-in-an-ios-app/

J'appelle cela la vue dans laquelle je veux masquer la barre d'onglets

[self makeTabBarHidden:YES];

cela fonctionne bien lorsque je le montre/le cache sur cette vue, mais lorsque je retourne à la vue précédente, la barre d'onglets est également masquée. J'ai essayé d'appeler cette fonction dans les fonctions viewDidUnload, viewWillDisappear, viewDidDisappear de la vue, mais rien ne se produit. Il en va de même lorsque la fonction est appelée dans les fonctions viewDidLoad, viewWillAppear, viewDidAppear de la vue précédente.

58
dork

Vous pouvez également définir UIViewController.hidesBottomBarWhenPushed:

DetailViewController *detailViewController = [[DetailViewController alloc] init];
detailViewController.hidesBottomBarWhenPushed = YES;
[[self navigationController] pushViewController:detailViewController animated:YES];    
[detailViewController release];
144
ushika

Vous pouvez également le faire dans Interface Builder pour un storyboard. Sélectionnez le contrôleur de vue pour lequel vous voulez masquer la barre d'onglets, puis sélectionnez "Masquer la barre inférieure en mode Push".

 enter image description here

35
Suragch

Je viens de créer une catégorie sur UITabBarController qui vous permet de masquer le TabBar, éventuellement avec une animation:

https://github.com/idevsoftware/Cocoa-Touch-Additions/tree/master/UITabBarController_setHidden

Il ajoute la propriété tabBarHidden (avec isTabBarHidden comme getter) et la méthode - (void)setTabBarHidden:(BOOL)hidden animated:(BOOL)animated.

13
boliva
self.navigationController.hidesBottomBarWhenPushed=YES;

Ajoutez cette ligne à votre viewdidload ou viewWillAppear Cela vous cachera l'onglet du bas.

2
Yogesh Dalavi

essayez ceci pour masquer/afficher;

-(void)viewWillDisappear:(BOOL)animated{
    self.hidesBottomBarWhenPushed = NO;
}
-(void)viewWillAppear:(BOOL)animated{
    self.hidesBottomBarWhenPushed = YES;
}
1
alicanozkara

Swift 3: Définir la barre d’onglet masquer

self.tabBarController?.tabBar.isHidden = true
1
Sandu

vous pouvez utiliser le code ci-dessous mais tabBar reste masqué lorsque vous revenez en arrière.

    //hide tabbar
    //self.tabBarController?.tabBar.isHidden = true

meilleure façon est de le faire via main.storyboard cochez "Hide Bottom Bar on Push" comme je l'ai fait.

 enter image description here

0
Soropromo

La même propriété est disponible sur l'inspecteur d'attributs lorsque vous cliquez sur votre contrôleur de vue sur votre fichier Xib ou storyboard.

0
ShowPony