J'utilise UISplitViewController
. Je voulais afficher une scène de détail de sélection vide lorsque l'utilisateur fait pivoter son iPhone 6 Plus en mode portrait et ne voit plus aucun détail. (Tous les autres appareils se comportent de manière prévisible, seul le 6 Plus peut changer son apparence.) J'utilise maintenant un split view delegate qui implique des requêtes bizarres, mais ce n'est pas le but.Réagir à la rotation iPhone 6+ - traitCollectionDidChange: appelé deux fois pour le contrôleur de navigation
Je me demandais comment savoir si l'iPhone 6 tournait en paysage.
La meilleure idée que j'ai trouvée: réagir aux changements de l'environnement des traits. Le contrôleur de vue maître reste compact à tout moment, seul son contrôleur de vue de navigation parent passe du compact au régulier et inversement. Lorsque vous utilisez un contrôleur de vue partagée, pour les sous-classes UINavigationController
dans le "Maître", traitCollectionDidChange:
sera appelé deux fois en utilisant un iPhone 6 Plus et en tournant en mode paysage. Il est appelé une fois en tournant en arrière.
willTransitionToTraitCollection:withTransitionCoordinator:
est même appelé trois fois et 1 fois, respectivement.
J'imagine que c'est parce que dans le paysage, vous pouvez voir deux contrôleurs de vue côte à côte. Cela n'a pas de sens pour moi que le UINavigationController
reçoive les appels pour les contrôleurs sous vue, cependant.
Étant donné que UITraitCollections
ne contient pas d'informations sur le contrôleur de vue affecté, je ne peux pas déterminer si l'environnement est passé de la taille horizontale régulière à la taille horizontale compacte de façon fiable. Une des collections de traits rapportera la nouvelle valeur correcte, mais je ne peux pas les discerner les uns des autres. Comment avez-vous résolu cela, maintenant que les rappels sont appelés plusieurs fois avec des valeurs différentes?
Avez-vous déjà trouvé cela? – Luke
Malheureusement, non. Je peux proposer une théorie ad hoc à ce sujet, mais c'est seulement sur l'iPhone 6, pas sur l'iPad. Peut-être que c'est un bug? Quand je toucherai la base de code plus tard cette année, je jetterai un coup d'œil avec le SDK alors le plus récent ¯ \\ _ (ツ) _/¯ – ctietze