Meu aplicativo (iPad; iOS 6) é um aplicativo somente paisagem, mas quando tento usar um UIPopoverController para exibir a biblioteca de fotos, ocorre o seguinte erro:
Supported orientations has no common orientation with the application, and shouldAutorotate is returning YES.
Tentei alterar muitos códigos, mas não tive sorte.
ipad
uipopovercontroller
landscape
ios6
Destiny Dawn
fonte
fonte
Respostas:
No IOS6, você tem suporte para orientações de interface em três lugares:
Se você está recebendo este erro, é provável que a visualização que você está carregando no UIPopover só suporte o modo retrato. Isso pode ser causado pelo Game Center, iAd ou por sua própria visualização.
Se for sua própria visualização, você pode corrigi-lo substituindo supportedInterfaceOrientations em seu UIViewController:
Se não for a sua própria visualização (como o GameCenter no iPhone), você precisa se certificar de que seu .plist suporta o modo retrato. Você também precisa se certificar de que seu UIApplicationDelegate suporta visualizações que são exibidas no modo retrato. Você pode fazer isso editando o seu .plist e, em seguida, substituindo o supportedInterfaceOrientation em seu UIApplicationDelegate:
fonte
UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight
éUIInterfaceOrientationMaskAllButUpsideDown
UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight
igual aUIInterfaceOrientationMaskLandscape
Depois de gastar muito tempo procurando uma maneira de evitar subclasses e adicionar toneladas de código, aqui está minha solução de código de uma linha.
Crie uma nova categoria de UIImagePickerController e adicione
Isso é tudo, pessoal!
fonte
Há outro caso em que essa mensagem de erro pode aparecer. Fiquei procurando por horas até encontrar o problema. Este tópico foi muito útil depois de lê-lo algumas vezes.
Se o seu controlador de visualização principal for girado para a orientação paisagem e você invocar um controlador de visualização secundária personalizado que deve ser exibido na orientação retrato, essa mensagem de erro pode ocorrer quando seu código se parece com este:
A armadilha aqui foi o intellisense do xcode sugerido "UIInterfaceOrientationPortrait" e eu não me importei com isso. À primeira vista, isso parecia correto.
A máscara certa é nomeada
Esteja ciente do pequeno infixo "Máscara" , caso contrário, sua subvisão terminará com uma exceção e a mensagem de erro mencionada acima.
Os novos enums são um pouco alterados. Os enums antigos retornam valores inválidos!
(em UIApplication.h você pode ver a nova declaração: UIInterfaceOrientationMaskPortrait = (1 << UIInterfaceOrientationPortrait) )
A solução é:
Em uso rápido
fonte
Tive um problema semelhante ao apresentar o seletor de imagens em um aplicativo somente paisagem. Conforme sugerido pelo Dr. Luiji, adicionei a seguinte categoria no início do meu controlador.
É mais fácil adicionar essas linhas antes da implementação @ do seu arquivo ViewController .m.
fonte
Eu estava encontrando a mesma mensagem de erro em meu código. Eu encontrei isso, é um bug relatado pela Apple:
https://devforums.apple.com/message/731764#731764
Sua solução é consertá-lo no AppDelegate. Eu implementei e funciona para mim!
fonte
Eu tive o mesmo problema e esta resposta https://stackoverflow.com/a/12523916 funciona para mim. Gostaria de saber se existe uma solução mais elegante.
Meu código:
fonte
@interface NonRotatingUIImagePickerController : UIImagePickerController @end @implementation NonRotatingUIImagePickerController - (BOOL)shouldAutorotate { return NO; } @end
ao código, mas meu código não detectou NonRotatingUIImagePickerController.iOS 8 - você pode usar UIModalPresentationPopover sem quaisquer hacks para exibir em um popover. Não é ideal, mas é melhor do que nada.
Editar: talvez tente os diferentes UIModalPresentationStyles - talvez mais funcionem na paisagem.
fonte
fonte
Outra opção que resolveu meus problemas foi criar uma subclasse do UIImagePickerController e substituir o método abaixo
Use-o em vez do UIImagePickerController e tudo funcionará bem.
fonte
Criar uma categoria é muito útil para corrigir esse bug. E não se esqueça de importar sua categoria criada. Isso adicionará o método ausente ao UIImagePickerController e no iOS 6 irá restringi-lo para funcionar no Portrait apenas como a documentação afirma btw.
As outras soluções podem ter funcionado. Mas com o SDK para iOS 8.x compilado para implantação no iOS 6.1, esse parece o caminho a percorrer.
O arquivo .h:
O arquivo .m:
fonte
Swift 3
fonte
Encontrei esse problema de travamento ao converter
UIInterfaceOrientationPortrait
paraUIInterfaceOrientationMaskPortrait
implicitamente como um valor de retorno.Mais informações sobre o código
UIPageViewControllerDelegate
, apenas para sua informação.fonte
Acabei de resolver o problema do Swift 4.x
Obrigado pessoal por suas respostas também. Acabei de cortar o código trabalhado e simplesmente refatorá-lo.
fonte
Swift 4 e superior, assumindo que todo o aplicativo está em paisagem e você precisa apresentar um único controlador em retrato. No controlador de visualização que deve ser retrato, adicione o seguinte:
fonte