Je vois que lorsque j'ai migré mon application vers iOS 7, la barre de navigation apparaît sous la barre d'état lors de la présentation d'un contrôleur de vue. Je pense que beaucoup de gens ont rencontré ce même problème. Voici une capture d'écran de ce que je vois:
La nouvelle vue doit apparaître "de façon modale", c'est-à-dire que j'ai besoin de presentViewController.
Affichez une sorte de barre de navigation ou de barre d'outils, la barre d'état prenant la couleur d'arrière-plan du style de barre de navigation sous iOS 7.
Cela doit fonctionner sur iOS 6.
J'utilise un xib pour gérer la mise en page, avec la mise en page automatique activée.
Ugh, revenons-nous à la pré-iOS 5 jours et au déblayage avec des cadres? De plus, ce n'est généralement pas une bonne idée de mélanger avec la mise en page automatique.
Un inconvénient des options A et B est que la barre d'état ne se fondra pas dans votre navigation:
Le principal inconvénient est que vous devrez nettoyer les contraintes et calculer les hauteurs de navigation et de barre d'état. Beurk.
A l'air bien sur iOS 7, mais tombe en panne sur iOS 6. Vous devrez mettre à jour par programmation la hauteur de la barre de navigation et vous assurer également que le reste de votre vue est mis à jour de manière appropriée. Désordonné.
Inconvénients multiples: vous coderez en dur les deltas ios6/7. Ne fonctionne pas non plus avec la mise en page automatique.
C'est la solution de contournement que j'ai sélectionnée. Voir la réponse ci-dessous.
La solution de contournement la plus simple que j'ai trouvée consiste à encapsuler le contrôleur de vue que vous souhaitez présenter à l'intérieur d'un contrôleur de navigation, puis à présenter ce contrôleur de navigation.
MyViewController *vc = [MyViewController new];
UINavigationController *nav = [[UINavigationController alloc]
initWithRootViewController:vc];
[self presentViewController:nav animated:YES completion:NULL];
Vous devez ajouter une contrainte verticale de votre vue la plus haute à Guide de mise en page supérieur comme décrit dans l'article suivant d'Apple.
https://developer.Apple.com/library/ios/qa/qa1797/_index.html
Le code suivant a fonctionné pour moi. Il suffit de le mettre sur le contrôleur qui présente le nouveau contrôleur.
#pragma mark hidden status bar
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:YES];
}
ouvrez votre fichier xib et sélectionnez le viewcontroller. dans l'onglet inspecteur, sélectionnez les attributs et sélectionnez dans la barre supérieure "Barre de navigation opaque". Cela a résolu le problème pour moi.