Moja aplikacja (iPad; iOS 6) jest aplikacją działającą wyłącznie w trybie poziomym, ale kiedy próbuję użyć kontrolera UIPopoverController do wyświetlenia biblioteki zdjęć, zgłasza ten błąd:
Supported orientations has no common orientation with the application, and shouldAutorotate is returning YES.
próbowałem zmienić dużo kodu, ale nie miałem szczęścia.
ipad
uipopovercontroller
landscape
ios6
Destiny Dawn
źródło
źródło
Odpowiedzi:
W IOS6 obsługujesz orientacje interfejsu w trzech miejscach:
Jeśli otrzymujesz ten błąd, najprawdopodobniej jest to spowodowane tym, że widok, który ładujesz w swoim UIPopover, obsługuje tylko tryb portretowy. Może to być spowodowane przez Game Center, iAd lub Twój własny widok.
Jeśli jest to Twój własny widok, możesz to naprawić, zastępując supportedInterfaceOrientations w UIViewController:
Jeśli to nie jest Twój własny widok (na przykład GameCenter na iPhonie), musisz się upewnić, że plik .plist obsługuje tryb portretowy. Musisz również upewnić się, że UIApplicationDelegate obsługuje widoki wyświetlane w trybie pionowym. Możesz to zrobić, edytując swój plik .plist, a następnie zastępując obsługiwaną opcję InterfaceOrientation w UIApplicationDelegate:
źródło
UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight
wynosiUIInterfaceOrientationMaskAllButUpsideDown
UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight
równychUIInterfaceOrientationMaskLandscape
Po spędzeniu dużo czasu na szukaniu sposobu na uniknięcie podklas i dodawanie mnóstwa kodu, oto moje rozwiązanie z jednym wierszem kodu.
Utwórz nową kategorię UIImagePickerController i dodaj
To wszystko ludzie!
źródło
W innym przypadku może pojawić się ten komunikat o błędzie. Szukałem godzinami, aż znalazłem problem. Ten wątek był bardzo pomocny po kilkukrotnym przeczytaniu.
Jeśli główny kontroler widoku jest obrócony do orientacji poziomej i wywołujesz niestandardowy kontroler widoku podrzędnego, który powinien być wyświetlany w orientacji pionowej, ten komunikat o błędzie może się pojawić, gdy kod wygląda następująco:
Pułapka polegała na tym, że inteligencja xcode zasugerowała „UIInterfaceOrientationPortrait” i nie przejmowałem się tym. Na pierwszy rzut oka wydawało się to słuszne.
Nazwa prawej maski
Zwróć uwagę na mały wrostek „Maska” , w przeciwnym razie Twój widok podrzędny zakończy się wyjątkiem i wspomnianym powyżej komunikatem o błędzie.
Nowe wyliczenia są nieco przesunięte. Stare wyliczenia zwracają nieprawidłowe wartości!
(w UIApplication.h można zobaczyć nową deklarację: UIInterfaceOrientationMaskPortrait = (1 << UIInterfaceOrientationPortrait) )
Rozwiązaniem jest:
W szybkim użyciu
źródło
Miałem podobny problem podczas prezentowania selektora obrazów w aplikacji tylko w orientacji poziomej. Zgodnie z sugestią Dr. Luiji na początku mojego kontrolera dodałem następującą kategorię.
Najłatwiej jest dodać te wiersze tuż przed @implementacją pliku .m ViewController.
źródło
W moim kodzie pojawił się ten sam komunikat o błędzie. Znalazłem to, to błąd zgłoszony przez Apple:
https://devforums.apple.com/message/731764#731764
Jego rozwiązaniem jest naprawienie tego w AppDelegate. Wdrożyłem to i działa na mnie!
źródło
Miałem ten sam problem i ta odpowiedź https://stackoverflow.com/a/12523916 działa dla mnie. Ciekawe, czy istnieje bardziej eleganckie rozwiązanie.
Mój kod:
źródło
@interface NonRotatingUIImagePickerController : UIImagePickerController @end @implementation NonRotatingUIImagePickerController - (BOOL)shouldAutorotate { return NO; } @end
kliknąłem przycisk, aby wywołać kod, ale nic nie zostało wyświetlone, próbowałem również dodać do kodu, ale mój kod nie wykrył NonRotatingUIImagePickerController.iOS 8 - możesz używać UIModalPresentationPopover bez żadnych hacków do wyświetlania w popover. Nie idealne, ale lepsze niż nic.
Edycja: być może wypróbuj różne style UIModalPresentationStyle - może więcej będzie działać w krajobrazie.
źródło
źródło
Inną opcją, która rozwiązała moje problemy, było utworzenie podklasy UIImagePickerController i zastąpienie poniższej metody
Użyj tego zamiast UIImagePickerController i wszystko działa dobrze.
źródło
Utworzenie kategorii jest bardzo pomocne w naprawieniu tego błędu. I nie zapomnij zaimportować utworzonej kategorii. Spowoduje to dodanie brakującej metody do UIImagePickerController, a na iOS 6 ograniczy ją do pracy w orientacji pionowej tylko zgodnie z dokumentacją btw.
Inne rozwiązania mogły zadziałać. Jednak w przypadku SDK dla iOS 8.x skompilowanego do wdrożenia w iOS 6.1 wydaje się, że jest to właściwe.
Plik .h:
Plik .m:
źródło
Szybki 3
źródło
Napotkałem ten problem z awarią podczas konwersji
UIInterfaceOrientationPortrait
naUIInterfaceOrientationMaskPortrait
niejawnie jako wartość zwracaną.Więcej tła kodu
UIPageViewControllerDelegate
, tylko do Twojej wiadomości dla wszystkich.źródło
Właśnie rozwiązałem problem ze Swift 4.x
Dziękuję również za wasze odpowiedzi. Właśnie wyciąłem działający kod i po prostu go przeformułowałem.
źródło
Swift 4 i nowsze, zakładając, że cała aplikacja jest w orientacji poziomej i musisz przedstawić pojedynczy kontroler w pionie. W kontrolerze widoku, który ma być portretem, dodaj:
źródło