vues d'alerte en mode portrait, iPad dans le paysage, et incapable de tourner à autre chose que le paysage « autre » (180 degrés)

StackOverflow https://stackoverflow.com/questions/3816566

Question

Mise à jour: Résolu. Voir fixe en bas.

Dans mon application iPad qui prend en charge toutes les orientations, si l'application est chargée dans le paysage, les choses étranges se produisent:

  1. vues d'alerte apparaissent en mode portrait, même si le reste est dans le paysage
  2. Rotation de l'iPad du paysage au portrait ne déclenche pas une rotation (ni ne déclenche l'une des méthodes de style shouldAutorotate).
  3. Rotation des iPad 180 degrés (à « autre paysage ») fait la rotation de déclenchement, et après cela, l'iPad se comporte comme normal (à savoir tourne correctement portrait et paysage lors d'une rotation).
écran

vue Alerte ci-dessous. Bizarre, bizarre. Toutes les idées pour lesquelles cela pourrait se produire? Il ne se produit que lors du chargement dans le paysage - chargement en mode portrait, puis tourner au paysage fonctionne très bien. Landtrait!

Solution: Ce problème est survenu parce que j'ajoutais un UIViewController (modalement) au-dessus du contrôleur principal de vue dès que l'application terminé le chargement (plus précisément, dans la méthode de viewDidAppear: de l'application).

iOS envoie un certain nombre de (4) les appels shouldAutorotateToInterfaceOrientation: à la vue actuelle / contrôleur principal après que les choses ont démarré, pour déterminer quelles orientations sont actuellement prises en charge. Quand j'ai ajouté l'autre VC si tôt, cela se produisait au milieu des appels susmentionnés. Ainsi, je ne suis arrivé un ou deux appels (pour « portrait », parce qu'il commence par le portrait).

Le contrôleur de la vue principale a ensuite été laissé avec un support par défaut de « NON » pour les orientations du paysage, mais le contrôleur de vue nouvellement ajoutée (qui est également posé des questions sur les orientations) maintenant répond heureusement oui.

Si j'avais enlevé l'autre VC (ce qui est dans le paysage), je l'aurais réalisé que mon contrôleur principal de vue était bloqué en mode portrait. Donc, j'avais vue portrait, sur lequel il y avait une vue du paysage. Les alertes et tels ont répondu à l'orientation des anciens, d'où les résultats désastreux ci-dessus.

De plus, si j'ai essayé de tourner à portrait, je ne pouvais pas, parce que le contrôleur principal de vue était déjà en mode portrait. La rotation de paysage a également été impossible parce que l'autre contrôleur de vue est déjà dans le paysage. Seulement quand je l'ai fait le « paysage mais autre » rotation, ont fait les deux contrôleurs de vue sont d'accord que la rotation était nécessaire, et ainsi le dispositif mis en rotation.

Le correctif dans mon cas était de mettre simplement la création de l'autre contrôleur à un léger retard. en utilisant performSelector:withObject:afterDelay. - 0 semblait fonctionner, mais je l'ai mis à 1 pour être sûr. Il semble un peu bizarre, avec le principal vc apparaissant, puis l'autre vc, mais il vaut mieux que ce qui précède.

Était-ce utile?

La solution

Ce problème est survenu parce que j'ajoutais un UIViewController (modalement) au-dessus du contrôleur principal de vue dès que l'application terminé le chargement (plus précisément, dans viewDidAppear de l'application: méthode).

Voir ci-dessus après pour les détails sur la solution.

Autres conseils

Utilisez UIAlertController au lieu de UIAlertView. J'ai le même problème et son corrigé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top