2009-12-26 3 views
0

J'ai une configuration de tabulation avec quelques onglets. Le premier tabitem est viewcontroller qui charge par programme un xib disposé en portrait. Lorsque l'utilisateur fait pivoter le téléphone, il présente automatiquement une vue modale en mode paysage. Ce mécanisme fonctionne bien. Lorsque l'appareil est tourné en mode portrait, il rejette la vue modale et une barre d'onglets est visible en bas. Je voudrais pour certains de mes autres éléments de la barre d'onglets tels qu'un scrollview et un webview pour autorotate au paysage quand l'appareil est tourné.iPhone: Quelques vues Paysage d'autres Portrait

J'ai implémenté une classe appelée RotateTabBarViewController qui contient la méthode shouldAutorotateToInterfaceOrientation et vérifie la valeur de la même méthode sur le SelectedController. Donc, si j'ai la méthode shouldAutorotateToInterfaceOrientation dans mon webview retournant true alors la vue tournera comme prévu.

Voici le problème. Alors que la vue pivotée est en mode paysage, la barre d'onglets est toujours visible, ce qui signifie qu'un utilisateur peut cliquer sur l'icône du premier élément. Lorsque le premier élément est cliqué, il sait qu'il est en mode paysage et charge automatiquement la vue modale à nouveau. Le seul problème est que la vue est décalée sur l'écran.

Je suis à la recherche d'une solution qui réaligne la vue modale là où elle est supposée être. Je ne suis pas sûr si c'est la vue principale qui doit être réalignée ou juste la vue modale.

Le lien suivant contient une démo du concept.

http://www.veryniceindustries.com/rotation_demo.zip

  • Faire pivoter l'appareil portrait
  • Sélectionner un élément Deux
  • Faites pivoter l'appareil au paysage (besoin d'aide pour réaligner ce point de vue)
  • Select Item Un (modal apparaît pour le paysage, mais est décalé)

Toute aide serait grandement appréciée.

Best, Howie

+0

Je regardais sur votre code, la planification de l'iSlate aussi je vois :) – Jonathan

+0

Quelque chose comme ça - D'une certaine manière ce projet a tous les éléments nécessaires pour apprendre à construire une application beaucoup plus grande. – Ward

Répondre

0

Avez-vous envisagé la mise en œuvre de la méthode viewWillAppear sur viewController # 1, et corriger le cadre de la vue?

Vous pouvez également le gérer dans itemOneViewController dans les méthodes orientationChanged ou updateItemOneView? PS: merci de fournir le code source, car un jeune programmeur Obj-C est toujours agréable de voir comment quelqu'un d'autre aborde un problème.

+0

Merci pour la réponse - mais je suis un tel noob je ne sais pas comment changer le cadre. S'agit-il simplement de passer un nouveau cadre à "self" dans la méthode viewWillAppear ou est-ce quelque chose de plus impliqué? Que se passe-t-il pour avoir un extrait que je peux consulter? Merci, Howie – Ward

+0

Bien UIViewController n'est pas un UIView, donc vous voulez quelque chose comme [self.view setFrame: UITabBarController.view.frame]. UITabBarController doit être l'instance de UITabBarController que vous utilisez. Vous pouvez faire une référence dans IB et l'assigner à ivar pour pouvoir le référencer facilement. les cadres sont des structures C appelées CGRect, vous pouvez les faire avec CGRectMake() – Jonathan

+0

ressemble à l'origine de la vue itemOneViewController et la vue itemOneLandscapeViewController sont tous les deux 0,0. Est-il possible que quelque chose d'autre bouge quand je passe d'un élément de tabbar à un autre? – Ward

Questions connexes