Meine App (iPad; iOS 6) ist eine reine Landschaftsanwendung. Wenn ich jedoch versuche, die Fotobibliothek mit einem UIPopoverController anzuzeigen, wird der folgende Fehler ausgegeben:
Supported orientations has no common orientation with the application, and shouldAutorotate is returning YES.
Ich habe versucht, einen Großteil des Codes zu ändern, hatte aber kein Glück.
ipad
uipopovercontroller
landscape
ios6
Destiny Dawn
quelle
quelle
Antworten:
In IOS6 haben Sie Schnittstellenorientierungen an drei Stellen unterstützt:
Wenn Sie diesen Fehler erhalten, liegt dies höchstwahrscheinlich daran, dass die Ansicht, die Sie in Ihrem UIPopover laden, nur den Hochformatmodus unterstützt. Dies kann durch Game Center, iAd oder Ihre eigene Ansicht verursacht werden.
Wenn es sich um Ihre eigene Ansicht handelt, können Sie dies beheben, indem Sie die unterstützten InterfaceOrientations auf Ihrem UIViewController überschreiben:
Wenn es sich nicht um Ihre eigene Ansicht handelt (z. B. GameCenter auf dem iPhone), müssen Sie sicherstellen, dass Ihre .plist den Porträtmodus unterstützt. Sie müssen auch sicherstellen, dass Ihr UIApplicationDelegate Ansichten unterstützt, die im Hochformat angezeigt werden. Sie können dies tun, indem Sie Ihre .plist bearbeiten und dann die unterstützte InterfaceOrientation in Ihrem UIApplicationDelegate überschreiben:
quelle
UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight
gleichUIInterfaceOrientationMaskAllButUpsideDown
UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight
gleichUIInterfaceOrientationMaskLandscape
Nachdem ich viel Zeit damit verbracht habe, nach einer Möglichkeit zu suchen, Unterklassen zu vermeiden und tonnenweise Code hinzuzufügen, ist hier meine einzeilige Codelösung.
Erstellen Sie eine neue Kategorie für UIImagePickerController und fügen Sie sie hinzu
Das war's Leute!
quelle
In einem anderen Fall kann diese Fehlermeldung angezeigt werden. Ich habe stundenlang gesucht, bis ich das Problem gefunden habe. Dieser Thread war sehr hilfreich, nachdem ich ihn einige Male gelesen hatte.
Wenn Ihr Hauptansichts-Controller in Querformat gedreht ist und Sie einen benutzerdefinierten Unteransichts-Controller aufrufen, der im Hochformat angezeigt werden soll, kann diese Fehlermeldung auftreten, wenn Ihr Code folgendermaßen aussieht:
Die Falle hier war xcodes Intellisense schlug "UIInterfaceOrientationPortrait" vor und es war mir egal. Auf den ersten Blick schien dies richtig zu sein.
Die richtige Maske heißt
Beachten Sie das kleine Infix "Maske" , da sonst in Ihrer Unteransicht eine Ausnahme und die oben genannte Fehlermeldung angezeigt werden.
Die neuen Aufzählungen sind etwas verschoben. Die alten Aufzählungen geben ungültige Werte zurück!
(In UIApplication.h sehen Sie die neue Deklaration: UIInterfaceOrientationMaskPortrait = (1 << UIInterfaceOrientationPortrait) )
Die Lösung ist:
Im schnellen Einsatz
quelle
Ich hatte ein ähnliches Problem, als ich die Bildauswahl in einer App nur für Landschaften präsentierte. Wie von Dr. Luiji vorgeschlagen, habe ich am Anfang meines Controllers die folgende Kategorie hinzugefügt.
Es ist am einfachsten, diese Zeilen unmittelbar vor der Implementierung Ihrer ViewController .m-Datei hinzuzufügen.
quelle
In meinem Code ist dieselbe Fehlermeldung aufgetreten. Ich habe dies gefunden, es ist ein Fehler, wie von Apple gemeldet:
https://devforums.apple.com/message/731764#731764
Seine Lösung besteht darin, das Problem im AppDelegate zu beheben. Ich habe es implementiert und es funktioniert für mich!
quelle
Ich hatte das gleiche Problem und diese Antwort https://stackoverflow.com/a/12523916 funktioniert für mich. Ich frage mich, ob es eine elegantere Lösung gibt.
Mein Code:
quelle
@interface NonRotatingUIImagePickerController : UIImagePickerController @end @implementation NonRotatingUIImagePickerController - (BOOL)shouldAutorotate { return NO; } @end
klicke , um den Code aufzurufen, aber nichts angezeigt wird, habe ich auch versucht , dem Code etwas hinzuzufügen , aber mein Code hat NonRotatingUIImagePickerController nicht erkannt.iOS 8 - Sie können UIModalPresentationPopover ohne Hacks verwenden, um es in einem Popover anzuzeigen. Nicht ideal, aber besser als nichts.
Bearbeiten: Probieren Sie vielleicht die verschiedenen UIModalPresentationStyles aus - vielleicht funktionieren mehr im Querformat.
quelle
quelle
Eine weitere Option, mit der meine Probleme behoben wurden, bestand darin, eine Unterklasse des UIImagePickerController zu erstellen und die folgende Methode zu überschreiben
Verwenden Sie dies anstelle des UIImagePickerController und alles funktioniert einwandfrei.
quelle
Das Erstellen einer Kategorie ist sehr hilfreich, um diesen Fehler zu beheben. Und vergessen Sie nicht, Ihre erstellte Kategorie zu importieren. Dadurch wird die fehlende Methode zu UIImagePickerController hinzugefügt und unter iOS 6 wird die Verwendung in Portrait nur eingeschränkt, wie in der Dokumentation angegeben.
Die anderen Lösungen haben möglicherweise funktioniert. Mit SDK für iOS 8.x, das für die Bereitstellung unter iOS 6.1 kompiliert wurde, scheint dies jedoch der richtige Weg zu sein.
Die .h-Datei:
Die .m-Datei:
quelle
Swift 3
quelle
Ich traf diesen Absturz Problem beim Konvertieren
UIInterfaceOrientationPortrait
zuUIInterfaceOrientationMaskPortrait
implizit als Rückgabewert.Mehr Code-Hintergrund auf
UIPageViewControllerDelegate
, nur zu Ihrer Information für Sie alle.quelle
Ich habe gerade das Problem für Swift 4.x behoben
Vielen Dank auch für eure Antworten. Ich habe gerade den bearbeiteten Code geschnitten und ihn einfach überarbeitet.
quelle
Swift 4 und höher unter der Annahme, dass sich die gesamte App im Querformat befindet und Sie einen einzelnen Controller im Hochformat präsentieren müssen. Fügen Sie im Ansichts-Controller, der im Hochformat sein muss, Folgendes hinzu:
quelle