Мое приложение (iPad; iOS 6) - это приложение только в альбомной ориентации, но когда я пытаюсь использовать UIPopoverController для отображения библиотеки фотографий, он выдает следующую ошибку:
Supported orientations has no common orientation with the application, and shouldAutorotate is returning YES.
я пытался изменить большую часть кода, но мне не повезло.
ipad
uipopovercontroller
landscape
ios6
Судьба рассвет
источник
источник
Ответы:
В IOS6 вы поддерживали ориентацию интерфейса в трех местах:
Если вы получаете эту ошибку, скорее всего, потому, что представление, которое вы загружаете в свой UIPopover, поддерживает только портретный режим. Это может быть вызвано Game Center, iAd или вашим собственным представлением.
Если это ваше собственное представление, вы можете исправить его, переопределив supportedInterfaceOrientations в своем UIViewController:
Если это не ваше собственное представление (например, GameCenter на iPhone), вам необходимо убедиться, что ваш .plist поддерживает портретный режим. Вам также необходимо убедиться, что ваш UIApplicationDelegate поддерживает представления, которые отображаются в портретном режиме. Вы можете сделать это, отредактировав свой .plist, а затем переопределив supportedInterfaceOrientation в своем UIApplicationDelegate:
источник
UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight
равно равноUIInterfaceOrientationMaskAllButUpsideDown
UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight
равноUIInterfaceOrientationMaskLandscape
Потратив много времени на поиск способа избежать создания подклассов и добавления тонны кода, вот мое решение с одной строкой кода.
Создайте новую категорию UIImagePickerController и добавьте
Вот и все, ребята!
источник
Это сообщение об ошибке может появиться в другом случае. Я искал часы, пока не нашел проблему. Эта ветка была очень полезна после того, как прочитала ее пару раз.
Если ваш главный контроллер представления повернут в альбомную ориентацию и вы вызываете настраиваемый контроллер вспомогательного представления, который должен отображаться в портретной ориентации, это сообщение об ошибке может появиться, когда ваш код выглядит следующим образом:
Ловушка здесь заключалась в том, что intellisense xcode предложил "UIInterfaceOrientationPortrait", и меня это не волновало. На первый взгляд это казалось правильным.
Правильная маска названа
Помните о маленьком инфиксе «Маска» , иначе ваше подвид будет иметь исключение и указанное выше сообщение об ошибке.
Новые перечисления сдвинуты на бит. Старые перечисления возвращают недопустимые значения!
(в UIApplication.h вы можете увидеть новое объявление: UIInterfaceOrientationMaskPortrait = (1 << UIInterfaceOrientationPortrait) )
Решение:
В быстром использовании
источник
У меня была аналогичная проблема при представлении средства выбора изображений в приложении только с альбомной ориентацией. Как предложил доктор Луиджи, я добавил следующую категорию в начало своего контроллера.
Эти строки проще всего добавить непосредственно перед @implementation вашего ViewController .m файла.
источник
Я столкнулся с тем же сообщением об ошибке в своем коде. Я нашел это, это ошибка, о которой сообщает Apple:
https://devforums.apple.com/message/731764#731764
Его решение - исправить это в AppDelegate. Я реализовал его, и он у меня работает!
источник
У меня была такая же проблема, и этот ответ https://stackoverflow.com/a/12523916 работает для меня. Интересно, есть ли более элегантное решение.
Мой код:
источник
@interface NonRotatingUIImagePickerController : UIImagePickerController @end @implementation NonRotatingUIImagePickerController - (BOOL)shouldAutorotate { return NO; } @end
в код, но мой код не обнаруживал NonRotatingUIImagePickerController.iOS 8 - вы можете использовать UIModalPresentationPopover без каких-либо хаков для отображения во всплывающем окне. Не идеально, но лучше, чем ничего.
Изменить: возможно, попробуйте разные стили UIModalPresentationStyles - возможно, больше будет работать в ландшафте.
источник
источник
Другой вариант, который решил мои проблемы, заключался в создании подкласса UIImagePickerController и переопределении метода ниже
Используйте это вместо UIImagePickerController, и все работает нормально.
источник
Создание категории действительно помогает исправить эту ошибку. И не забудьте импортировать созданную вами категорию. Это добавит отсутствующий метод в UIImagePickerController, а в iOS 6 он ограничит его работу в портретной ориентации только в соответствии с документацией, кстати.
Другие решения могли сработать. Но с SDK для iOS 8.x, скомпилированным для развертывания на iOS 6.1, это кажется правильным решением.
.H-файл:
.M-файл:
источник
Swift 3
источник
Я столкнулся с этой проблемой при аварии преобразования
UIInterfaceOrientationPortrait
вUIInterfaceOrientationMaskPortrait
неявный в качестве возвращаемого значения.Больше фона кода
UIPageViewControllerDelegate
, просто к вашему сведению для всех вас.источник
Я только что решил проблему для Swift 4.x
Спасибо, ребята, и за ответы. Я только что вырезал отработанный код и просто переделал его.
источник
Swift 4 и выше при условии, что все приложение находится в альбомной ориентации, и вам нужно представить один контроллер в портретной ориентации. В контроллере представления, который должен быть портретным, добавьте следующее:
источник