2010-06-11 5 views
0

Version courte:
Je suis alloc/init/conservant une nouvelle UIViewController dans une méthode UIViewControllers viewDidLoad, en ajoutant la nouvelle vue à self.view. Cela fonctionne généralement, mais il semble déranger la manipulation de changement d'orientation de mon application iPad.Ajout UIViewController.view à une autre vue provoque des problèmes d'orientation

version plus longue:
Je construis une application iPad assez complexe, impliquant un grand nombre de vues et viewcontrollers. Après avoir rencontré quelques difficultés pour m'adapter à l'orientation de l'appareil, j'ai fait un simple projet XCode pour comprendre quel est le problème. Tout d'abord, j'ai lu les Apple Docs sur ce sujet (un petit document appelé "Why won't my UIViewController rotate with the device?"), et même si je crois que cela a quelque chose à voir avec l'une des raisons énumérées ici, je ne suis pas vraiment sûr de savoir comment résoudre ce problème. il.

Dans mon projet de test, j'ai un appDelegate, un rootViewController et un UISplitViewController avec deux viewControllers personnalisés. J'utilise un bouton sur le rootViewController pour basculer vers le splitViewController, et à partir de là, je peux utiliser un bouton pour revenir au rootViewController. Jusqu'à présent, tout est parfait, c'est-à-dire que toutes les vues s'ajustent à l'orientation de l'appareil.

Cependant, dans le droit viewController du splitViewController, j'utilise la méthode viewDidLoad pour initialiser d'autres viewControllers, et ajouter leurs vues à son propre point de vue:

self.newViewController = [[UIViewController nouveau] autorelease]; [newViewController.view setBackgroundColor: [UIColor yellowColor]]; [self.view addSubview: newViewController.view];

C'est là que les choses tournent mal. D'une certaine manière, après avoir ajouté cette vue, l'ajustement à l'orientation de l'appareil est désordonné. Au démarrage, tout va bien, après que je passe au splitViewController, tout va bien, mais dès que je reviens au rootViewController, tout est fini. J'ai essayé (presque) tout ce qui concerne la rétention et la libération du viewcontroller, mais rien ne semble le réparer.

Comme vous pouvez le voir dans le code ci-dessus, j'ai déclaré le newViewController en tant que propriété, mais la même chose se produit si ce n'est pas le cas.

Ne devrais-je pas ajouter la vue d'un ViewController à ma propre vue? Ce serait vraiment gâcher mon projet, car j'ai beaucoup de viewControllers faire toutes sortes de choses.

Toute aide sur ce serait grandement apprécié ...

+0

J'ai le même problème, en fait mon application ne peut fonctionner qu'en mode paysage et a 3 vues, toutes configurées comme paysage dans IB. Le premier, chargé automatiquement, est chargé dans le bon sens, mais si j'essaie d'ajouter une sous-vue, la nouvelle vue est en mode portrait. Toujours en train de creuser. – Cesar

+0

possible lié à: http://stackoverflow.com/questions/2656088/uiview-added-with-incorrect-orientation/3059099#3059099 – Cesar

Répondre

1

J'ai eu le même problème, coutures résolus en retirant du parent voir l'option « autoresize sous-vue » dans IB.
Sélectionnez la vue a puis: Inspecteur -> Attributs (premier onglet) -> dessin.

0

Ce que je pense est que votre nouveau viewcontroller reçoit les appels d'autorotation et ne les gère probablement pas. Pendant ce temps, vos anciens viewcontrollers et leurs vues n'obtiendront pas les appels d'autorotation et resteront dans l'orientation où ils se trouvent.

Je ne sais pas, mais je pense que ce que vous voulez faire est de faire un UIView et d'ajouter à votre ancien viewcontroller, au lieu de créer un UIVIewController et d'ajouter sa vue.

Questions connexes