2010-08-21 9 views
1

Mon application dispose de 4 onglets. Tous les contrôleurs de vue prennent en charge la rotation, et sont en effet pivotés lorsque je fais tourner l'appareil. Pour l'un des contrôleurs de vue, j'ai besoin de repositionner certaines des sous-vues lors de la rotation. Je le fais dans willRotateToInterfaceOrientation de ce contrôleur de vue, et cela fonctionne très bien.iphone - TabBarController question de rotation

Le problème survient lorsque je passe à un onglet différent, puis je fais pivoter l'appareil, puis je reviens à l'onglet d'origine. Il n'a apparemment pas reçu la notification de rotation, puisque willRotateToInterfaceOrientation n'a pas été appelé. Il semble donc que seul le contrôleur de vue "actif" soit averti que l'appareil a tourné.

La question: comment faire tourner tous les contrôleurs de vue (contrôlés par un TabBarController)?

Répondre

0

Malheureusement, il s'agit d'un bug dans iOS 3.x. Cela fonctionne très bien dans iOS 4.x. J'ai vu des applications qui gardent manuellement les changements d'orientation, puis effectuent la rotation manuellement pour les contrôleurs de vue inactifs. Suce.

+0

Hmm. Ceci est une application iPad, donc je suis en train de tester sur iPad simulateur 3.2. Vous dites qu'une fois que je peux construire avec iPad 4.0, ça va magiquement commencer à fonctionner? – sol

+0

Il fonctionnera vraisemblablement pour les iPads sur 4.0+; les utilisateurs qui n'ont pas mis à niveau recevront bien sûr le bogue. –

+0

Je suis confronté au même problème en 4.3.5. Je ne suis pas sûr que ce soit un bug iOS 3.x. Les vues qui pivotent correctement avec les masques autorésisables fonctionnent correctement lorsque vous passez d'un onglet à l'autre, mais si le code de rotation personnalisé est requis, aucune des méthodes de rotation n'est appelée automatiquement et vous avez deux options: surveiller les changements de rotation via NSNotifications. exécutez le hack sur viewWillAppear. D'autres suggestions? – wasabi

0

En regardant à travers les docs iOS 3.2 pour vous assurer que cela fonctionne, il y a une propriété viewControllers dans UITabBarController. Essayez quelque chose comme ceci:

for (UIViewController * viewController in tabBarController) { 
    // Do stuff here with each 'viewController'. 
} 

Je vous recommande de faire quelque chose avec la méthode de -shouldAutorotateToInterfaceOrientation:UIViewController mais vous pouvez avoir une autre façon dont vous envisagez de réaliser la rotation.

0

Vous devez également vérifier l'orientation de l'interface dans la méthode viewWillAppear du contrôleur dont vous modifiez le cadre des sous-vues.Parce que vous passez au nouvel onglet et faites pivoter le périphérique, la méthode viewWillAppear et là vous pouvez changer les cadres en conséquence. J'ai également fait face au même problème que j'ai résolu en utilisant cette approche

Questions connexes