7

Ésta es una observación más que nada, porque parecen haber encontrado un trabajo en torno ...[UIDevice currentDevice] == .orientation UIDeviceOrientationUnknown siguiente UINavigationController empujar

El código siguiente no funciona cuando está en un controlador que se ha insertado en una pila UINavigationController. En esta situación, [UIDevice currentDevice].orientation devuelve constantemente UIDeviceOrientationUnknown.

-(void)layoutAccordingToOrientation { 
    UIDeviceOrientation orientation = [UIDevice currentDevice].orientation; 
    NSLog(@"layoutAccordingToOrientation/orientation==%i", orientation); 
    if (UIInterfaceOrientationIsLandscape(orientation)) { 
     : 
     _detailToolbar.frame = CGRectMake(0, 660, 1024, 44); 
    } else { 
     : 
     _detailToolbar.frame = CGRectMake(0, 916, 768, 44); 
    } 
} 

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
    [self layoutAccordingToOrientation]; 
} 

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

la siguiente llamada ha sido hecha:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 

Para evitar este UIDeviceOrientationUnknown -problema, ahora uso el siguiente lugar:

UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation; 
if (UIInterfaceOrientationIsLandscape(orientation)) { 
    etc. 
} else { 
    etc. 
} 

... que trabaja cada vez.

Aún así, no veo por qué la primera variación no funcionaría en el contexto de un controlador de vista presionado. ¿Ideas a alguien? ¿Es simplemente un error?

+0

Estoy teniendo el mismo problema, sin embargo, no puedo hacer que su trabajo funcione en mi situación. – Flea

Respuesta

3

que podría pensar en un par de cosas aquí, pero no estoy seguro de que son lo que estás buscando ...

En primer lugar, cuando se inicia la aplicación, por lo general la orientación del dispositivo devuelve UIDeviceOrientationUnknown por razones de rendimiento. Una cosa que podría intentar es diseñar sus subvistas dentro de .nib o en su Storyboard, con las opciones correctas de ajuste automático, y dejar que iOS haga su trabajo.

En segundo lugar, si eres como yo, tal vez estás probando en un dispositivo que está justo al lado de tu computadora, sobre una mesa. Bueno, en ese caso, usted es no va a obtener la cosa UIDeviceOrientationUnknown. En realidad, debería probar UIDeviceOrientationIsValidInterfaceOrientation([[UIDevice currentDevice] orientation]). Si el dispositivo está acostado boca arriba, por ejemplo, devuelve sí a esa declaración. Esto también significa que cuando usa UIInterfaceOrientationIsLandscape(orientation), obtiene el resultado correcto por el motivo equivocado. El UIInterfaceOrientationIsLandscape devuelve falso no porque la orientación del dispositivo sea UIDeviceOrientationPortrait, sino porque no es válido.

No estoy tan seguro de si esto ayudó, pero me tomó un tiempo darme cuenta y pensé que sería bueno compartir esta información. :)

Cuestiones relacionadas