2009-02-18 10 views
1

Voici ma configuration: un contrôleur de navigation, deux vuesRotation affectant la barre de navigation imprévisiblement

La première vue, le rootview, affiche la barre d'état et la barre de navigation (mode portrait). Lorsque le rootviewController détecte une rotation, il masque la barre de navigation et la barre d'état, puis il pousse la vue 2 sur le contrôleur de navigation (en mode paysage maintenant).

Cette partie fonctionne comme prévu. Lorsque le ViewController View2 détecte la rotation (retour au portrait), il apparaît lui-même du contrôleur de navigation, révélant la vue 1. La vue 1 affiche alors la barre d'état et la barre de navigation. De là, ça devient bizarre. En fonction du moment où j'ouvre la barre de navigation, j'obtiens des résultats étranges. Comme vous pouvez le voir ci-dessous (la photo de bécher devrait être juste au-dessous de la barre de navigation en haut de l'écran).

J'ai essayé démasquage la barre de navigation:

  • viewWillRotate/viewDidRotate de vue 2
  • viewWillAppear/viewDidAppear de vue 1
  • poptoRootView dans le contrôleur de navigation (je sous-classé juste essayer)

Rien ne fonctionne. Une idée de ce qui se passe? Cela devrait être simple, mais peut-être que je fais des choses au mauvais endroit.

botched screen

Répondre

0

En fin de compte, je retravaillé mon application. (pour utiliser un contrôleur de vue modale)

Mais je suis arrivé à des problèmes similaires, à la place un espace blanc où se trouvait la barre d'état.

Je pense que les deux problèmes peuvent être attribués à ne pas parler au contrôleur de navigation lorsque les vues de rotation/redimensionnement (au lieu que je parlais à la ViewController

Pour plus de détails sur la façon dont je l'ai résolu le problème.

iPhone + CGAffineTransFormRotate(pi/2) + statusBarHidden:YES + presentModalViewController = 20 pixels of white space

0

Vérifiez votre masque Autoresizing sur toutes les vues de votre plume et assurez-vous que son tout correctement réglé. Si vous avez quelque chose de la façon dont il n'est pas censé être, il va flipper sur la rotation.

+0

Un peu dérouté par cette réponse Quel serait le bon masque de redimensionnement? Je l'ai juste laissé par défaut –

+0

Ceci: http://tinyurl.com/belg95 Cela affecte ce que fait la vue lorsque son aperçu redimensionne. lignes pour affecter la façon dont la position de la vue va changer, et la flèche intérieure affecter la façon dont la vue elle-même sera redimensionnée. Cliquez également sur la flèche de la fenêtre IB pour tester la rotation. –

+0

Pour clarifier mon dernier point: cliquez sur la petite flèche en haut à droite de la barre de titre de la fenêtre dans laquelle vos vues sont disposées.Cela fera une autrotation pour vous et vous pouvez voir comment vous redimensionnez les masques fonctionnent. –

0

Vous ne savez pas pourquoi c'est nécessaire, mais lorsque vous échangez des vues, vous devez appliquer une transformation à votre vue (avec seulement 1 vue que l'iPhone fait pour vous), et vous devez en définir les limites.

Voici le code qui devrait fonctionner pour vous (sur le willAnimateFirstHalfOfRotationToInterfaceOrientation):

#define degreesToRadians(x) (M_PI * (x)/180.0) 
if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) { 
    self.view = landscapeView; 
    self.view.transform = CGAffineTransformIdentity; 
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(90)); 
    self.view.bounds = CGRectMake(0.0, 0.0, 480.0, 320); 

} else { 
    self.view = portraitView; 
    self.view.transform = CGAffineTransformIdentity; 
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(0)); 
    self.view.bounds = CGRectMake(0.0, 0.0, 300, 480); 
} 
Questions connexes