Поддерживаемые ориентации не имеют общей ориентации с приложением, и shouldAutorotate возвращает ДА ​​’

Мое приложение (iPad, iOS 6) является ландшафтным приложением, но когда я пытаюсь использовать UIPopoverController для отображения библиотеки фотографий, это вызывает эту ошибку: Supported orientations has no common orientation with the application, and shouldAutorotate is returning YES. Я пытался изменить много кода, но мне не повезло.

    В IOS6 вы поддерживали ориентацию интерфейса в трех местах:

    1. Экран .plist (или итоговый экран цели)
    2. Ваш UIApplicationDelegate
    3. Отображаемый UIViewController

    Если вы получаете эту ошибку, это скорее всего, потому что просмотр, который вы загружаете в своем UIPopover, поддерживает только портретный режим. Это может быть вызвано Game Center, iAd или вашим собственным представлением.

    Если это ваш собственный взгляд, вы можете исправить его, переопределив supportInterfaceOrientations на вашем UIViewController:

     - (NSUInteger) supportedInterfaceOrientations { //Because your app is only landscape, your view controller for the view in your // popover needs to support only landscape return UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight; } 

    Если это не ваш собственный взгляд (например, GameCenter на iPhone), вам нужно убедиться, что ваш .plist поддерживает портретный режим. Вам также необходимо убедиться, что ваш UIApplicationDelegate поддерживает представления, отображаемые в портретном режиме. Вы можете сделать это, отредактировав свой .plist, а затем переопределив поддерживаемую функциюInterfaceOrientation на вашем UIApplicationDelegate:

     - (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight; } 

    Проведя много времени, чтобы найти способ избежать подclassа и добавить тонну кода, вот мое решение с одной строкой.

    Создайте новую категорию UIImagePickerController и добавьте

     -(BOOL)shouldAutorotate{ return NO; } 

    Это все люди!

    В противном случае может появиться это сообщение об ошибке. Я искал часы, пока не нашел проблему. Этот stream был очень полезен после прочтения его пару раз.

    Если ваш главный controller просмотра повернут в альбомную ориентацию, и вы вызываете пользовательский controller подзадачи, который должен отображаться в портретной ориентации, это сообщение об ошибке может случиться, когда ваш код выглядит следующим образом:

     - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationPortrait; } 

    Ловушка здесь была intellisense от xcode, которая предложила «UIInterfaceOrientationPortrait», и мне это не волновало. На первый взгляд это казалось правильным.

    Правая маска называется

     UIInterfaceOrientationMaskPortrait 

    Помните о маленькой инфиксной маске «Маска» , иначе ваше подчиненное будет иметь исключение и указанное выше сообщение об ошибке выше.

    Новые enums смещены в битах. Предыдущие enums возвращают недопустимые значения!

    (в UIApplication.h вы можете увидеть новое объявление: UIInterfaceOrientationMaskPortrait = (1 << UIInterfaceOrientationPortrait) )

    Решение:

     - (BOOL)shouldAutorotate { return YES; } - (NSUInteger)supportedInterfaceOrientations { // ATTENTION! Only return orientation MASK values // return UIInterfaceOrientationPortrait; return UIInterfaceOrientationMaskPortrait; } 

    При быстром использовании

     override func shouldAutorotate() -> Bool { return true } override func supportedInterfaceOrientations() -> Int { return Int(UIInterfaceOrientationMask.Portrait.rawValue) } 

    У меня была аналогичная проблема при представлении подборщика изображений в приложении только для пейзажа. Как предложил доктор Луиджи, я добавил следующую категорию в начале моего controllerа.

     // This category (ie class extension) is a workaround to get the // Image PickerController to appear in landscape mode. @interface UIImagePickerController(Nonrotating) - (BOOL)shouldAutorotate; @end @implementation UIImagePickerController(Nonrotating) - (BOOL)shouldAutorotate { return NO; } @end 

    Проще всего добавить эти строки непосредственно перед @implementation вашего файла ViewController .m.

    В моем коде я столкнулся с тем же сообщением об ошибке. Я нашел это, это ошибка, о которой сообщает Apple:

    https://devforums.apple.com/message/731764#731764

    Его решение – исправить это в AppDelegate. Я реализовал его, и он работает для меня!

    У меня была такая же проблема, и этот ответ https://stackoverflow.com/a/12523916 работает для меня. Интересно, есть ли более элегантное решение.

    Мой код:

     UIImagePickerController *imagePickerController = [[NonRotatingUIImagePickerController alloc] init]; imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; UIPopoverController *popoverVC = [[UIPopoverController alloc] initWithContentViewController:imagePickerController]; [popoverVC presentPopoverFromRect:frame // did you forget to call this method? inView:view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

    iOS 8 – вы можете использовать UIModalPresentationPopover без каких-либо хаков для отображения в popover. Не идеально, но лучше, чем ничего.

     imagePicker.modalPresentationStyle = UIModalPresentationPopover; imagePicker.popoverPresentationController.sourceView = self.view; imagePicker.popoverPresentationController.sourceRect = ((UIButton *)sender).frame; 

    Изменить: возможно, попробуйте разные UIModalPresentationStyles – возможно, больше будет работать в ландшафте.

     - (BOOL)shouldAutorotate { return NO; } -(NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait; } This removes the crash. 

    Другой вариант, который разрешил мои проблемы, заключался в создании подclassа UIImagePickerController и переопределении метода ниже

     @interface MyImagePickerController () @end @implementation MyImagePickerController - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; } 

    Используйте это вместо UIImagePickerController, и все работает отлично.

    Создание категории действительно полезно для исправления этой ошибки. И не забудьте импортировать созданную вами категорию. Это добавит отсутствующий метод в UIImagePickerController, а на iOS 6 он ограничит его работу в портрете только в том случае, если в документации указано btw.

    Другие решения, возможно, сработали. Но с SDK для iOS 8.x, скомпилированным для развертывания на iOS 6.1, это похоже на путь.

    .H-файл:

     #import  @interface UIImagePickerController (iOS6FIX) - (BOOL) shouldAutorotate; - (UIInterfaceOrientation) preferredInterfaceOrientationForPresentation; @end 

    .M-файл:

     #import "UIImagePickerController+iOS6FIX.h" @implementation UIImagePickerController (iOS6FIX) - (BOOL) shouldAutorotate { return NO; } - (UIInterfaceOrientation) preferredInterfaceOrientationForPresentation { return UIInterfaceOrientationPortrait; } @end 

    Swift 3

     let imagePicker = UIImagePickerController() imagePicker.modalPresentationStyle = .popover imagePicker.popoverPresentationController?.sourceView = sender // you can also pass any view present(imagePicker, animated: true) 

    Я столкнулся с этой проблемой при UIInterfaceOrientationPortrait при преобразовании UIInterfaceOrientationPortrait в UIInterfaceOrientationMaskPortrait неявно в качестве возвращаемого значения.

    Больше кода фона на UIPageViewControllerDelegate , просто FYI для всех вас.

      -(UIInterfaceOrientationMask)pageViewControllerSupportedInterfaceOrientations: (UIPageViewController *)pageViewController { # return UIInterfaceOrientationPortrait; # wrong return UIInterfaceOrientationMaskPortrait; # correct } 
    Interesting Posts

    Защищенные веб-службы: REST через HTTPS и SOAP + WS-Security. Что лучше?

    Обновление старого кода Unity до Unity 5

    Загрузите YouTube через командную строку

    Ntbackup workalike для adhoc полных резервных копий в Windows 7 бесплатно и предпочтительно с открытым исходным кодом

    Windows 7: Событие 55 Структура файловой системы на диске повреждена и непригодна для использования

    PhoneGap: открытие внешних URL-адресов в Safari

    Что такое ModelState.IsValid, допустимое для ASP.NET MVC в NerdDinner?

    Есть ли способ получить макет текущей активности и представления через adb?

    Лучший способ форматирования входной информации для редактирования editText?

    Как я могу безопасно форматировать твердотельный накопитель?

    Как указать различные макеты в файле ViewStart бритвы ASP.NET MVC 3?

    Как сохранить профили запуска Eclipse в рабочих пространствах?

    Когда функция constexpr получает оценку во время компиляции?

    В Windows 10, почему некоторые программы масштабируются на втором мониторе 2.1, но не контролируют 2.2?

    Тернарный оператор в два раза медленнее, чем блок if-else?

    Давайте будем гением компьютера.