2012-10-02 9 views
28

Este error no tiene sentido, ya que la orientación preferida UIInterfaceOrientationLandscapeRight se devuelve por la orientación apoyadopreferredInterfaceOrientationForPresentation debe devolver una orientación de interfaz soportado

//iOS6 

-(BOOL)shouldAutorotate 
{ 
    return NO; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return (UIInterfaceOrientationLandscapeRight | UIInterfaceOrientationLandscapeLeft); 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return UIInterfaceOrientationLandscapeRight; 
} 

Error:

Terminación de aplicación debido a excepción no detectada 'UIApplicationInvalidInterfaceOrientation', razón: 'preferredInterfaceOrientationForPresentation debe devolver una orientación de interfaz compatible!'

Respuesta

52

El código debería tener este aspecto:

-(BOOL)shouldAutorotate 
{ 
    return NO; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskLandscape; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return UIInterfaceOrientationLandscapeRight; 
} 

Además, asegúrese de que su Info.plist ha establecido las orientaciones correctas para su aplicación porque lo que devuelve desde supportedInterfaceOrientations se cruza con el Info.plist y si no puede encontrar uno común, obtendrá ese error.

+0

¡Estoy descubriendo que esto me causa dolor! Tengo una aplicación universal que comparte el código de control de visualización y uso la prueba de código anterior para el idioma del usuario. el ipad necesita ser solo horizontal y el retrato de iphone para todos los de barra uno que debe ser horizontal. No puedo conseguir que esto proporcione las orientaciones correctas en – user7865437

+3

Tenga en cuenta que es la parte "Máscara" de "UIInterfaceOrientationMaskLandscape" la parte importante de esta respuesta. El usuario del cartel original es la enumeración incorrecta en su método. Parece un poco tonto que Apple haya creado un nuevo conjunto de enum/options para este método, lo que hace que las personas cometan este error fácil. Además, Xcode no proporciona ninguna verificación del tiempo del compilador porque el método devuelve NSUInteger. –

+1

@lms, toda mi aplicación debería admitir solo para el modo vertical, excepto una vista (que debe ser compatible con Horizontal). En Plist, he configurado la orientación solo para Portrait y escribí el código anterior en el que quiero cambiar la orientación para Landscape. Pero está dando UIInterfaceOrientationLandscapeRight o UIInterfaceOrientationLandscapeLeft. Pero quiero ambos en mi opinión. ¿Puedes decirme cómo puedo obtenerlo? –

8

Esas son las enumeraciones incorrectas para supportedInterfaceOrientations. Es necesario utilizar UIInterfaceOrientationMaskLandscapeLeft, etc (nota la palabra de máscara en el medio)

14

supportedInterfaceOrientations sólo se le llama, si shouldAutorotate se establece en YES

- (BOOL)shouldAutorotate 
{ 
    return YES; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskLandscape; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return UIInterfaceOrientationLandscapeRight; 
} 

El método más sencillo para mí, es sólo para establecer el Info.plist

info.plist

Si te gusta para apoyar iOS 5 usa este código en los controladores de visualización.

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
return UIInterfaceOrientationIsLandscape(interfaceOrientation); 
} 
1

de la documentación:

-(NSUInteger)supportedInterfaceOrientations { 

    return UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskLandscapeLeft; 
} 

Tenga en cuenta que la orientación correcta es "máscara"! ¿Has probado esto?

Cuestiones relacionadas