Mi aplicación (iPad; iOS 6) es una aplicación solo horizontal, pero cuando intento usar un UIPopoverController para mostrar la biblioteca de fotos, arroja este error:
Supported orientations has no common orientation with the application, and shouldAutorotate is returning YES.
Intenté cambiar mucho del código pero no tuve suerte.
ipad
uipopovercontroller
landscape
ios6
Destiny Dawn
fuente
fuente
Respuestas:
En IOS6, ha admitido orientaciones de interfaz en tres lugares:
Si recibe este error, lo más probable es que la vista que está cargando en su UIPopover solo admita el modo vertical. Esto puede deberse a Game Center, iAd o su propia vista.
Si es su propia vista, puede solucionarlo anulando supportedInterfaceOrientations en su UIViewController:
Si no es su propia vista (como GameCenter en el iPhone), debe asegurarse de que su .plist admita el modo vertical. También debe asegurarse de que su UIApplicationDelegate admita vistas que se muestran en modo vertical. Puede hacer esto editando su .plist y luego anulando la SupportInterfaceOrientation en su UIApplicationDelegate:
fuente
UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight
esUIInterfaceOrientationMaskAllButUpsideDown
UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight
igual a igualUIInterfaceOrientationMaskLandscape
Después de pasar mucho tiempo buscando una forma de evitar subclases y agregar toneladas de código, aquí está mi solución de código de una línea.
Cree una nueva categoría de UIImagePickerController y agregue
¡Eso es todo amigos!
fuente
Hay otro caso en el que puede aparecer este mensaje de error. Estuve buscando durante horas hasta que encontré el problema. Este hilo fue muy útil después de leerlo un par de veces.
Si su controlador de vista principal se gira a la orientación horizontal e invoca un controlador de vista secundaria personalizado que debe mostrarse en orientación vertical, este mensaje de error puede ocurrir cuando su código se ve así:
La trampa aquí fue el intellisense sugerido por xcode "UIInterfaceOrientationPortrait" y no me importó. A primera vista, esto parecía correcto.
La máscara correcta se llama
Tenga en cuenta el pequeño infijo "Máscara" , de lo contrario su subvista terminará con una excepción y el mensaje de error mencionado anteriormente.
Las nuevas enumeraciones se modifican un poco. ¡Las antiguas enumeraciones devuelven valores inválidos!
(en UIApplication.h puede ver la nueva declaración: UIInterfaceOrientationMaskPortrait = (1 << UIInterfaceOrientationPortrait) )
La solucion es:
En uso rápido
fuente
Tuve un problema similar al presentar el selector de imágenes en una aplicación solo horizontal. Como sugirió el Dr. Luiji, agregué la siguiente categoría al comienzo de mi controlador.
Es más fácil agregar estas líneas justo antes de la @implementación de su archivo ViewController .m.
fuente
Encontré el mismo mensaje de error en mi código. Encontré esto, es un error según lo informado por Apple:
https://devforums.apple.com/message/731764#731764
Su solución es arreglarlo en AppDelegate. ¡Lo implementé y me funciona!
fuente
Tuve el mismo problema y esta respuesta https://stackoverflow.com/a/12523916 funciona para mí. Me pregunto si hay una solución más elegante.
Mi código:
fuente
@interface NonRotatingUIImagePickerController : UIImagePickerController @end @implementation NonRotatingUIImagePickerController - (BOOL)shouldAutorotate { return NO; } @end
al código, pero mi código no detectaba NonRotatingUIImagePickerController.iOS 8: puede usar UIModalPresentationPopover sin ningún truco para mostrar en una ventana emergente. No es ideal, pero es mejor que nada.
Editar: tal vez pruebe los diferentes UIModalPresentationStyles; tal vez más funcionen en el paisaje.
fuente
fuente
Otra opción que resolvió mis problemas fue crear una subclase de UIImagePickerController y anular el método siguiente
Use esto en lugar del UIImagePickerController y todo funciona bien.
fuente
Crear una categoría es realmente útil para corregir este error. Y no olvide importar su categoría creada. Esto agregará el método que falta a UIImagePickerController y en iOS 6 lo restringirá para que funcione en Portrait solo como dice la documentación por cierto.
Las otras soluciones pueden haber funcionado. Pero con SDK para iOS 8.x compilado para implementar en iOS 6.1, este parece el camino a seguir.
El archivo .h:
El archivo .m:
fuente
Swift 3
fuente
Me encontré con este problema accidente cuando la conversión
UIInterfaceOrientationPortrait
deUIInterfaceOrientationMaskPortrait
forma implícita como valor de retorno.Más antecedentes de código
UIPageViewControllerDelegate
, solo para su información para todos ustedes.fuente
Acabo de resolver el problema de Swift 4.x
Gracias chicos también por sus respuestas. Acabo de cortar el código trabajado y simplemente lo refactoricé.
fuente
Swift 4 en adelante, asumiendo que toda la aplicación está en horizontal y necesita presentar un solo controlador en vertical. En el controlador de vista que debe ser vertical agregue lo siguiente:
fuente