iOS6: supportedInterfaceOrientations ne fonctionne pas (est invoquée, mais l'interface tourne toujours)
Dans mon application j'ai plusieurs points de vue, certains points de vue nécessité de soutenir à la fois portrait et paysage, tandis que d'autres vues de la nécessité de soutenir portrait uniquement. Ainsi, dans le résumé du projet, j'ai tout sélectionné toutes les orientations.
Le code ci-dessous travaillé pour désactiver le mode paysage sur une-vue-contrôleur avant iOS 6:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
//Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
Depuis shouldAutorotateToInterfaceOrientation a été dépréciée en iOS6 j'ai remplacé le ci-dessus avec:
-(NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMask.Portrait;
}
Cette méthode est correctement appelé lorsque la vue s'affiche (je peux mettre un point d'arrêt pour s'assurer de cela), mais l'interface tourne toujours en mode paysage, indépendamment du fait que je suis de retour le masque pour le mode portrait uniquement. Ce que je fais mal?
Il semble qu'actuellement il est impossible de construire une application qui a une orientation différente des exigences per view. Elle semble être la seule à respecter les orientations précisées dans le projet de résumé.
- Veuillez consulter ce [lien][1] peut vous aider. [1]: stackoverflow.com/questions/12526054/...
- Ici, j'ai posté ma solution/mise en commun dans le tab bar controller avec des rotations: stackoverflow.com/a/12774037/751641
- J'ai rencontré le même problème. Suivant la réponse est bien utile: stackoverflow.com/questions/12996293/...
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez un UINavigationController comme la racine de la fenêtre contrôleur, il sera son
shouldAutorotate
&supportedInterfaceOrientations
qui serait appelé.Idem si vous utilisez un UITabBarController, et ainsi de suite.
Donc la chose à faire est de classe de votre navigation/tabbar contrôleur et de remplacer son
shouldAutorotate
&supportedInterfaceOrientations
méthodes.supportedInterfaceOrientations
méthode et le retour de la droite soutenu l'orientation.supportedInterfaceOrientations
manière à ne pas être appelé. Néanmoins, la première fois que je vois un -1 accepté de répondre 🙂essayez de changer ce code dans AppDelegate.m
c'est la réponse complète
shouldAutorotateToInterfaceOrientation pas être appelé dans iOS 6
XD
Dans mon cas, j'ai UINavigationController et de mon point de vue, contrôleur de l'intérieur. J'ai eu une classe de UINavigationController et, afin de soutenir uniquement Portrait, ajoutez cette méthode:
Donc dans le UINavigationController sous-classe j'ai besoin de vérifier l'orientation qui est prise en charge par le courant topViewController.
Une chose que j'ai trouvé est que si vous avez une vieille application qui est encore en train de faire
Vous aurez besoin de mettre à jour à:
Une fois que vous faites cela, l'orientation devrait commencer à travailler à nouveau.
Le meilleur moyen pour iOS6, plus précisément, c'est noté dans "iOS6 Par Tutoriels" par le Rayon Wenderlich équipe - http://www.raywenderlich.com/ et c'est mieux que de sous-classement UINavigationController pour la plupart des cas.
Je suis sous iOS6 avec un scénario qui comprend un UINavigationController défini comme le point de vue initial du contrôleur.
//AppDelegate.m - cette méthode n'est pas disponible en pré-iOS6 malheureusement
//MyViewController.m - de retour quel que soit orientations à prendre en charge pour chaque UIViewController
Comme indiqué par d'autres, si vous utilisez un UINavigationController et vous souhaitez personnaliser les différents points de vue, vous aurez envie de la sous-classe le UINavigationController et assurez-vous que vous disposez de ces deux composants:
Alors en tout point de vue c'est un portrait que vous serez le seul à comprendre:
Et en tout point de vue c'est tout, mais à l'envers:
Fondamentalement, comme quelqu'un l'a indiqué ci-dessus, mais en plus de détail:
Dans cette classe(.m fichier) ajouter le code suivant afin de rester en mode portrait:
Cela a fonctionné pour moi
Ce code a fonctionné pour moi:
Application iPhone/iPad de l'Orientation découvrez ma propre réponse
info.plist
fichier. J'utilise ce code pour une application Universelle, l'iPhone prend en charge le Portrait et PortraitUpsideDown, et l'iPad prend en charge tous les modèles.La meilleure façon, je pense, est de faire une Catégorie plutôt que de sous-classement
UINavigationController
ouUITabbarController
votre UINavigationController+Rotation.h
votre UINavigationController+Rotation.m
Essayer de faire tout votre contrôleur à l'importation de cette catégorie et ce travail comme un charme.
Vous pouvez même faire un pas de contrôleur de rotation et de pousser un autre contrôleur qui va tourner.
Essayez d'ajouter
shouldAutorotate
méthodeTout d'abord, afin de rendre votre application de fonctionner en mode, vous devriez être de retour
UIInterfaceOrientationMaskLandscape
. Dans le cas où vous souhaitez conserver uniquement en mode portrait, vous faites les choses correctement.Il suffit d'ajouter le
UISupportedInterfaceOrientations
clé dans l'Info.plist et affecter l'interface de l'orientation des valeurs de votre application a l'intention de garder.En outre, vous devriez retourner faux de
shouldAutoRotate
dans le cas où vous souhaitez éviter la rotation automatique de totalement. Mais je vous suggère de retourner la valeur true à partir d'ici et de préciser les orientations correctes danssupportedInterfaceOrientations
méthode.J'ai la même situation que vous. Je sais que vous avez déjà accepté une réponse, mais je pensais que je voudrais en ajouter un autre de toute façon. C'est la façon dont je comprends la nouvelle version du système de rotation pour les travaux. La vue racine contrôleur est le seul point de vue contrôleur jamais être appelé. Le raisonnement, je crois, est que avec vue enfant contrôleurs ça n'a pas de sens souvent pour faire tourner leurs points de vue, car ils seront tout simplement rester dans le cadre de la vue racine contrôleur de toute façon.
Donc, ce qui se passe. Première
shouldAutorotate
est appelé sur la vue racine contrôleur. SiNO
est retourné puis tout s'arrête. SiYES
est retourné alors lessupportedInterfaceOrientations
méthode est invoquée. Si l'interface de l'orientation est confirmée dans cette méthode et le mondial orientations prises en charge soit de l'Info.plist ou le délégué d'application, puis la vue va tourner. Avant la rotation de lashouldAutomaticallyForwardRotationMethods
méthode est interrogé. SiYES
(par défaut), alors tous les enfants recevront lewill
etdidRotateTo...
méthodes ainsi que les parents et à leur tour, transmettront à leurs enfants).Ma solution (jusqu'à il y a un plus éloquent) est d'interroger le dernier enfant de-vue-contrôleur au cours de la
supportedInterfaceOrientations
méthode et renvoie sa valeur. Cela me permet de faire tourner certains domaines, tout en gardant les autres portrait uniquement. Je me rends compte qu'il est fragile, mais je ne vois pas une autre manière qui n'implique pas de compliquer les choses avec l'événement appels, rappels, etc.Si vous utilisez
UINavigationController
, vous avez à mettre en œuvreshouldAutorotate
etsupportedInterfaceOrientations
dans la sous-classe deUINavigationController
.Ces sont en mesure de contrôler en deux étapes, si
shouldAutorotate
retourne OUI, alors efficacesupportedInterfaceOrientations
. C'est une très belle combinaison.Cet exemple, mes pour la plupart des vues sont Portrait à l'exception CoverFlowView et PreviewView.
Le CoverFlowView transfert à PreviewView, PreviewView veut suivre CoverFlowCView de rotation.
ma solution : sous-classé
UINavigationController
et le définir commewindow.rootViewController
haut viewcontroller de la hiérarchie à prendre le contrôle de l'orientation , des exemples de code : sous-classé UINavigationController
Les réponses ici m'a orienté dans la bonne direction, mais je ne pouvais pas le faire fonctionner par suffit de couper et coller parce que je suis en utilisant UINavigationControllers à l'intérieur d'un UITabBarController. Donc ma version en AppDelegate.m ressemble à quelque chose comme ça, qui va travailler pour UITabBarControllers, UINavigationControllers ou UINavigationControllers dans un UITabBarController. Si vous utilisez d'autres personnalisé de confinement des contrôleurs, vous auriez besoin de les ajouter ici (qui est une sorte de poisse).
Une autre chose à noter est que vous devez remplacer supportedInterfaceOrientations dans votre UIViewController sous-classes ou il sera, par défaut, ce que vous avez spécifié dans votre Info.plist.