Mon application (iPad; iOS 6) est une application uniquement en mode paysage, mais lorsque j'essaie d'utiliser un UIPopoverController pour afficher la photothèque, cela génère cette erreur:
Supported orientations has no common orientation with the application, and shouldAutorotate is returning YES.
j'ai essayé de changer une grande partie du code mais je n'ai pas eu de chance.
ipad
uipopovercontroller
landscape
ios6
Aube du destin
la source
la source
Réponses:
Dans IOS6, vous avez pris en charge les orientations d'interface à trois endroits:
Si vous obtenez cette erreur, c'est probablement parce que la vue que vous chargez dans votre UIPopover ne prend en charge que le mode portrait. Cela peut être causé par Game Center, iAd ou votre propre vue.
S'il s'agit de votre propre vue, vous pouvez le corriger en remplaçant supportedInterfaceOrientations sur votre UIViewController:
S'il ne s'agit pas de votre propre vue (comme GameCenter sur l'iPhone), vous devez vous assurer que votre .plist prend en charge le mode portrait. Vous devez également vous assurer que votre UIApplicationDelegate prend en charge les vues affichées en mode portrait. Vous pouvez le faire en modifiant votre .plist, puis en remplaçant le supportedInterfaceOrientation sur votre UIApplicationDelegate:
la source
UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight
estUIInterfaceOrientationMaskAllButUpsideDown
UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight
égal àUIInterfaceOrientationMaskLandscape
Après avoir passé beaucoup de temps à chercher un moyen d'éviter les sous-classements et d'ajouter une tonne de code, voici ma solution de code en une ligne.
Créez une nouvelle catégorie UIImagePickerController et ajoutez
C'est tout les gens!
la source
Dans un autre cas, ce message d'erreur peut apparaître. J'ai cherché pendant des heures jusqu'à ce que je trouve le problème. Ce fil a été très utile après l'avoir lu plusieurs fois.
Si votre contrôleur de vue principal est tourné en orientation paysage et que vous invoquez un contrôleur de vue secondaire personnalisé qui devrait être affiché en orientation portrait, ce message d'erreur peut se produire lorsque votre code ressemble à ceci:
Le piège ici était l'intellisense de xcode suggéré "UIInterfaceOrientationPortrait" et je m'en fichais. À première vue, cela semblait correct.
Le bon masque est nommé
Faites attention au petit infixe "Mask" , sinon votre sous-vue se retrouvera avec une exception et le message d'erreur mentionné ci-dessus.
Les nouvelles énumérations sont légèrement décalées. Les anciennes énumérations renvoient des valeurs invalides!
(dans UIApplication.h, vous pouvez voir la nouvelle déclaration: UIInterfaceOrientationMaskPortrait = (1 << UIInterfaceOrientationPortrait) )
La solution est:
En utilisation rapide
la source
J'ai eu un problème similaire lors de la présentation du sélecteur d'images dans une application de paysage uniquement. Comme suggéré par le Dr Luiji, j'ai ajouté la catégorie suivante au début de mon contrôleur.
Il est plus simple d'ajouter ces lignes juste avant la @implementation de votre fichier ViewController .m.
la source
Je rencontrais le même message d'erreur dans mon code. J'ai trouvé ça, c'est un bug rapporté par Apple:
https://devforums.apple.com/message/731764#731764
Sa solution est de le corriger dans l'AppDelegate. Je l'ai implémenté et ça marche pour moi!
la source
J'ai eu le même problème et cette réponse https://stackoverflow.com/a/12523916 fonctionne pour moi. Je me demande s'il existe une solution plus élégante.
Mon code:
la source
@interface NonRotatingUIImagePickerController : UIImagePickerController @end @implementation NonRotatingUIImagePickerController - (BOOL)shouldAutorotate { return NO; } @end
au code mais mon code ne détectait pas NonRotatingUIImagePickerController.iOS 8 - vous pouvez utiliser UIModalPresentationPopover sans aucun piratage à afficher dans un popover. Pas idéal mais mieux que rien.
Edit: essayez peut-être les différents UIModalPresentationStyles - peut-être que d'autres fonctionneront en paysage.
la source
la source
Une autre option qui a résolu mes problèmes était de créer une sous-classe de UIImagePickerController et de remplacer la méthode ci-dessous
Utilisez ceci au lieu de UIImagePickerController et tout fonctionne correctement.
la source
Créer une catégorie est vraiment utile pour corriger ce bogue. Et n'oubliez pas d'importer votre catégorie créée. Cela ajoutera la méthode manquante à UIImagePickerController et sur iOS 6, cela limitera son fonctionnement dans Portrait uniquement comme l'indique la documentation btw.
Les autres solutions peuvent avoir fonctionné. Mais avec le SDK pour iOS 8.x compilé pour être déployé sur iOS 6.1, cela semble être la voie à suivre.
Le fichier .h:
Le fichier .m:
la source
Swift 3
la source
J'ai rencontré ce problème plantage lors de la conversion
UIInterfaceOrientationPortrait
de manièreUIInterfaceOrientationMaskPortrait
implicite comme une valeur de retour.Plus de fond de code
UIPageViewControllerDelegate
, juste pour info pour vous tous.la source
Je viens de résoudre le problème de Swift 4.x
Merci les gars pour vos réponses également. Je viens de couper le code travaillé et de le refactoriser simplement.
la source
Swift 4 et plus en supposant que toute l'application est en paysage et que vous devez présenter un seul contrôleur en portrait. Dans le contrôleur de vue qui doit être portrait, ajoutez ce qui suit:
la source