42 votes

iOS 7 | Boutons de la barre de navigation / barre d'outils très proches de la barre d'état

J'ai un problème lorsque vous faites glisser une barre de navigation ou la barre d'outils (storyboard) de mon point de vue contrôleur.

UINavigationBar:

UINavigationBar

Comme vous pouvez le voir dans l'image ci-dessus, le bouton droit est presque chevauchement de la barre d'état.

Avec un UIToolbar il arrive la même chose:

UIToolbar

Ce point de vue les contrôleurs sont destinés à être utilisés comme un Modal, c'est la raison pour laquelle je ne suis pas à l'aide d'un UINavigationController.

Dans un autre article j'utilise un UINavigationController et il semble que j'attends:

UINavigationController

Comment puis-je faire glisser un UINavigationBar / UIToolbar de vue contrôleur sans masquer la barre d'état?

Merci à l'avance.

48voto

Leo Natan Points 25262

Les barres de navigation barres d'outils doivent être au point (0, viewController.topLayoutGuide.length) avec positionnement de la barre de UIBarPositionTopAttached. Vous devez définir le délégué de votre barre de navigation ou de votre barre d'outils à votre vue-contrôleur, et de revenir UIBarPositionTopAttached. Si positionné correctement, vous aurez le résultat dans votre troisième image.

Plus d'informations ici: https://developer.apple.com/library/ios/documentation/uikit/reference/UIBarPositioningDelegate_Protocol/Reference/Reference.html

25voto

onmyway133 Points 2196

Ces étapes

Faites glisser le NavigationBar à votre ViewController dans Xib, définir le ViewController comme délégué. Notez que le NavigationBar doit être d'au (0, 20)

Dans le ViewController, conforme à l' UINavigationBarDelegate

@interface ETPViewController () <UINavigationBarDelegate>

Mettre en œuvre cette méthode

- (UIBarPosition)positionForBar:(id <UIBarPositioning>)bar
{
    return UIBarPositionTopAttached;
}

positionForBar raconte l'NavigationBar si il devrait prolonger son arrière-plan à la hausse la Barre d'État

10voto

bobics Points 773

Veuillez voir ma réponse ici, j'ai copié le contenu ci-dessous pour plus de commodité:

http://stackoverflow.com/a/18912291/1162959

La plus simple solution de contournement que j'ai trouvé est d'envelopper le point de vue du contrôleur que vous souhaitez présenter à l'intérieur d'une manette de navigation, puis présenter cette manette de navigation.

MyViewController *vc = [MyViewController new];
UINavigationController *nav = [[UINavigationController alloc] 
    initWithRootViewController:vc];
[self presentViewController:nav animated:YES completion:NULL];

Avantages:

  • Pas de coucher avec des cadres nécessaires.
  • Même code fonctionne sur iOS 6 et iOS 7.
  • Moins moche que les autres solutions.

Inconvénients:

  • Vous aurez probablement envie de quitter votre XIB vide de barres de navigation barres d'outils, et en programmant ajouter UIBarButtonItems à la barre de navigation. Heureusement c'est assez facile.

5voto

David Points 3254

Vous pouvez résoudre ce problème en utilisant la Mise en page Automatique, comme par cette technique note (Prévention de la Barre d'État de la couverture de Votre point de Vue).

Voici quelques extraits:

Ajouter l'Espace Vertical Contrainte jusqu'à la première vue

  • Contrôle de la faire glisser à partir de la UIToolbar pour le "Haut de page"
  • Dans la liste, choisissez "espace Vertical"
  • Changer la "Verticale de l'Espace de Contrainte Constante à 0 (zéro)

Si vous avez d'autres sous-vues ci-dessous la UIToolbar, l'ancrage de ces points de vue à la barre d'outils au lieu de le Top Guide de Présentation de l'

Cela permettra de soutenir l'ios6 et ios7.

0voto

Utkarsh Goel Points 157

Vous pouvez également le gérer en augmentant la hauteur de la barre de navigation en fournissant une image de taille 620x128 pour la version ios. Et cette image est utilisée dans:

 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)?YES:NO) {
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"newImage.png"] forBarMetrics:UIBarMetricsDefault];
}else{
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"previousImage.png"] forBarMetrics:UIBarMetricsDefault];
}
 

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