2010-11-27 3 views
4

Je travaille sur une application iOS. Mon délégué d'application charge mon contrôleur de vue sur la fenêtre et l'affiche correctement, à l'exception d'une mise en garde: les vues sur mon contrôleur de vue ne sont pas assez loin sur l'axe Y et la barre d'état ma vue de dessus. J'ai changé le fichier XIB de mon contrôleur de vue pour tenir compte de cela, alors maintenant toutes mes vues commencent 20 pixels en bas de l'axe Y. Au chargement initial, tout semble bien. Quand je tourne, mes vues sont inférieures de 20 pixels à ce qu'elles devraient être (en raison de mon changement de disposition pour accommoder le premier chargement). Ce que je me demande, c'est comment mieux gérer le positionnement dans un contrôleur de vue pour gérer la hauteur de la barre d'état.iOS Shift Controller après rotation

Répondre

1

J'ai résolu ce problème en ne rendant pas la vue directement/par programmation dans la fenêtre. Ce que je fais à la place est de créer un RootViewController, qui est placé et aligné correctement dans les deux orientations, et avoir toutes les autres vues dans le RootViewController. La raison pour laquelle cela se produit est que la fenêtre d'une application est toujours l'intégralité de l'écran (y compris la barre d'état en haut). Si vous essayez de remplir la fenêtre, vous devez traiter et compenser la barre d'état et d'autres chrome. Facilite la gestion de toutes les vues à l'intérieur d'une vue racine.

0

Votre solution dépend de la manière dont vous avez créé le projet.

Si vous avez utilisé le modèle Application basée sur la vue lors de la création du projet, votre contrôleur de vue est situé dans MainWindow.xib. Votre contrôleur de vue doit fonctionner correctement à la fois au démarrage (au lancement) et après la rotation des périphériques, à condition que l'attribut Barre d'état soit activé (par exemple, Gris ou Noir) pour votre contrôleur de vue dans ce NIB.

Si vous avez utilisé le modèle d'application à base de fenêtres lorsque vous avez créé le projet, vous devrez ajouter la ligne de code suivante à vos didFinishLaunchingWithOptions de délégué de l'application:

myViewController.view.frame = window.screen.applicationFrame; 

qui comme par magie fait bouger les choses mises en place correctement.