40 votes

Comment masquer la barre UITabBar ?

Dans mon application, j'ai une barre d'onglets. Et dans certaines vues, j'ai également une barre d'outils. Ainsi, lorsque j'accède à ces vues avec une barre d'outils, l'aspect est affreux : deux barres au bas de la vue. J'ai pensé que la meilleure solution serait de masquer la barre d'onglets lorsque j'accède à ces vues particulières. Mais je n'ai pas réussi à trouver le moyen de le faire correctement. J'ai essayé de définir la propriété tabBar hidden de UITabBarController sur YES, mais cela n'a pas fonctionné. Et j'ai également essayé de faire la chose suivante dans la vue où je me trouve :

self.hidesBottomBarWhenPushed = YES;

Mais ça n'a pas marché aussi bien.

Quelle est la bonne solution à cette situation ? Je ne veux pas avoir deux barres à chaque vue.

68voto

Panagiotis Korros Points 3073

Vous devez définir la propriété hidesBottomBarWhenPushed sur YES sur le contrôleur que vous poussez et NON sur le UITabBarController.

otherController.hidesBottomBarWhenPushed = YES;
[navigationController pushViewController: otherController animated: TRUE];

Ou vous pouvez définir la propriété lorsque vous initialisez le contrôleur que vous voulez pousser.

1 votes

J'ai trois contrôleurs de vue que le UITabBarController peut présenter. Sur le deuxième contrôleur de vue, je mets self.hidesBottomBarWhenPushed = YES en initWithNibName:bundle: . Lorsque j'ai testé l'utilisation du deuxième contrôleur de vue, la barre d'outils était toujours présente.

1 votes

Essayé sur un nouveau projet avec ios7 - aucun effet

0 votes

Lorsque je retourne à l'écran, j'ai un espace noir en haut de la barre d'onglets.

13voto

Vladimir Shutyuk Points 514

Le constructeur d'interface dispose d'une case à cocher pour le contrôleur de vue intégré dans la barre d'onglets - Masque la barre inférieure en cas de poussée. Dans les cas simples, il n'est plus nécessaire de le faire par le biais du code.

Pour @Micah

Hide bottom bar on push.

0 votes

Cela a fonctionné pour moi sur ios7 où le fait de mettre la même valeur dans le code n'a pas fonctionné.

0 votes

Où se trouve cette case à cocher ?

0 votes

Faites-le sur le contrôleur de vue de destination, pas sur la source !

9voto

SAKrisT Points 2229

N'utilisez pas cette solution !

BOOL hiddenTabBar;
UITabBarController *tabBarController;

- (void) hideTabBar {

     [UIView beginAnimations:nil context:NULL];
     [UIView setAnimationDuration:0.4];
     for(UIView *view in tabBarController.view.subviews)
     {
          CGRect _rect = view.frame;
          if([view isKindOfClass:[UITabBar class]])
          {
               if (hiddenTabBar) {
                    _rect.origin.y = [[UIScreen mainScreen] bounds].size.height-49;
                    [view setFrame:_rect];
               } else {
                    _rect.origin.y = [[UIScreen mainScreen] bounds].size.height;
                    [view setFrame:_rect];
               }
          } else {
               if (hiddenTabBar) {
                    _rect.size.height = [[UIScreen mainScreen] bounds].size.height-49;
                    [view setFrame:_rect];
               } else {
                    _rect.size.height = [[UIScreen mainScreen] bounds].size.height;
                    [view setFrame:_rect];
               }
          }
     }    
     [UIView commitAnimations];

     hiddenTabBar = !hiddenTabBar;
}

Source :

1 votes

Utilisation d'une barre d'onglets personnalisée (ALTabBar). Celle-ci a fonctionné pour moi. Au lieu de supporter un écran 4", j'ai changé 480 en [[UIScreen mainScreen] bounds] -> size.height

1 votes

Super, mais... essayez de ne pas utiliser des valeurs fixes comme 431 ou 480. Vous devriez toujours écrire du code pour fonctionner dans n'importe quelle taille d'écran !

0 votes

Si vous voulez vraiment redimensionner la vue (et pas seulement masquer la barre de tabulation), définissez self.tabBarController.tabBar.hidden = hiddenTabBar ;

9voto

titusmagnus Points 470

Moi aussi, j'ai lutté contre cela pendant un certain temps. Masquer la barre d'onglets est un pas dans la bonne direction, mais laisse un rectangle noir derrière. L'astuce consiste à redimensionner le calque qui soutient la vue de l'UIViewController.

J'ai écrit une petite démo ici avec une solution :

https://github.com/tciuro/FullScreenWithTabBar

J'espère que cela vous aidera !

0 votes

Astuce géniale, j'aimerais pouvoir donner plus de votes positifs. Je ne savais même pas qu'il y avait une couche derrière le UIViewController !

0voto

Xaxxus Points 370

Il n'existe aucun moyen intégré de masquer la barre d'onglets pour la vue actuelle.

Vous pouvez le masquer en poussant une vue avec la fonction hidesBottomBarWhenPushed variable.

Si vous souhaitez masquer votre barre d'onglets dans votre vue actuelle, vous pouvez procéder comme suit :

L'essentiel ici

Notez que UIKit semble faire revenir la barre d'onglets à la reprise de l'application. Vous devrez donc vous abonner à la notification UIApplication.didBecomeActiveNotification et appeler la fonction ci-dessus.

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