Ce code fonctionnait bien jusqu'à la sortie d'iOS 7. UIViewController
un UIViewController
, avec hidesBottomBarWhenPushed
comme YES
, en tant que rootViewController
d'un UINavigationController
. Mais le TabBar est montré de toute façon. Voici le code pertinent:
Login *lv = [[Login alloc] init]; lv.HowToUseShows = showHowToUse; lv.hidesBottomBarWhenPushed = YES; UINavigationController *BokShelfNav = [[UINavigationController alloc] initWithRootViewController:lv]; //... UITabBarController *tbController = [[UITabBarController alloc] init]; tbController.viewControllers = @[BokShelfNav,...];
Quelqu'un avec un problème similaire?
J'ai découvert que l'ordre dans lequel les methods sont appelées et les propriétés définies a un impact sur l'affichage de la barre d'tabs.
Si je mets self.hidesBottomBarWhenPushed = YES;
Dans la méthode viewDidLoad
du controller de vue, je pousse toujours la barre d'tabs. Si je l'ai déplacé vers la méthode init
, la barre d'tabs se cache comme sur iOS 6.
La seule solution de contournement que j'ai trouvée consiste à démarrer tabBarController dans un autre onglet ( [tbController setSelectedIndex:1];
), puis, dans la méthode viewWillAppear:
de cet onglet ViewController do [tbController setSelectedIndex:0];
J'ai mis setSelectedIndex après l'instruction de poussée et cela a fonctionné.
//created tabbar controller object if(index==0) [tabbarcontroller setSelectedIndex:1]; [self.navigationcontroller pushViewcontroller:tabbarcontroller anmated:YES]; [tabbarcontroller setSelectedIndex:index];
Le seul problème est si vous montrez votre controller à l'index 0 en ce qu'il montrera. Dans ce cas, j'ai d'abord mis l'index de mt tabbarcontroller à 1 (différent de 0). Et son fonctionnement.