objective-c orientation statusbar

objective c - iOS 8: la rotación hace que la barra de estado desaparezca incluso en modo retrato después de alternar los controles



objective-c orientation (4)

¿Está utilizando la barra de estado basada en UIViewController? Si implementas prefersStatusBarHidden asumo que eres.

Ahora,

[[UIApplication sharedApplication] setStatusBarHidden:!statusBarHidden withAnimation: UIStatusBarAnimationSlide];

no se supone que funcione con la apariencia de la barra de estado basada en UIViewController.

Solo necesita devolver un valor diferente del método prefersStatusBarHidden y llamar a setNeedsStatusBarAppearanceUpdate para notificar a la aplicación que el valor de retorno ha cambiado.

Así que para cambiar la visibilidad de la barra de estado solo debes hacer

@property (nonatomic, assign) BOOL hideStatusBar; - (BOOL)prefersStatusBarHidden { return self.hideStatusBar; } - (void)toggleBars:(UITapGestureRecognizer *)gesture { ... hide navbar and tabbar ... self.hideStatusBar = ! self.hideStatusBar; [self setNeedsStatusBarAppearanceUpdate]; }

¡Y eso es!

Tengo muchos problemas con el nuevo ocultamiento automático de la barra de estado en iOS 8.

En mi aplicación, tengo una vista en la que cuando el usuario toca una vez, la barra de navegación y la barra de estado desaparecen.

Cuando está en el paisaje, la barra de estado se oculta sola y está bien para mí. Solo lo necesito en modo retrato.

Pero el problema es que cuando el dispositivo está en posición horizontal y se muestra la barra, cuando el usuario toca dos veces para alternar la barra (de manera que se muestra) y convierte el dispositivo en modo vertical, la barra de estado aún está oculta.

Básicamente, necesito poder ocultar la barra de estado sin interferir con su comportamiento natural en iOS 8, así que resumo el escenario:

  • El usuario ingresa a dicha vista con tabBar y NavigationBar y statusBar;
  • Taps una vez en la vista y las barras desaparecen.
  • El usuario gira el dispositivo, la barra de estado no aparece - OK, quiero esto
  • El usuario vuelve a tocar para mostrar las barras: la barra de estado aún está oculta, OK.
  • El usuario gira de horizontal a vertical y ...
  • statusBar sigue oculto - NO OK.

MRW> http://rack.2.mshcdn.com/media/ZgkyMDEzLzA2LzEzL2Y0L1B1Y2suODkyZGIuZ2lmCnAJdGh1bWIJMTIwMHg5NjAwPg/c6538ddb/a38/Puck.gif

He intentado ajustar la barra de estado en willRotate, pero hice un lío en el que la barra de estado sería visible cuando se suponía que no debía hacerlo. Código que estoy usando:

- (BOOL)prefersStatusBarHidden { return statusBarHidden; } -(void)toggleBars:(UITapGestureRecognizer *)gesture{ CATransition *animation = [CATransition animation]; animation.type = kCATransitionFromBottom; animation.subtype = kCATransitionFromTop; animation.duration = .2f; [animation setTimingFunction:[CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseInEaseOut]]; BOOL toggleNavigationBar = self.navigationController.navigationBarHidden; [self.navigationController.navigationBar.layer addAnimation:animation forKey:nil]; [self.navigationController setNavigationBarHidden:!toggleNavigationBar animated:YES]; BOOL toggleTabHidden = self.tabBarController.tabBar.hidden; if(![[[NSUserDefaults standardUserDefaults] objectForKey:@"showTabBar"]isKindOfClass:[NSNull class]]){ if([(NSNumber*)[[NSUserDefaults standardUserDefaults] objectForKey:@"showTabBar"]boolValue]) { [self.tabBarController.tabBar.layer addAnimation:animation forKey:nil]; [self.tabBarController setHideTabBar:!toggleTabHidden animated:YES]; } } statusBarHidden = [UIApplication sharedApplication].statusBarHidden; [[UIApplication sharedApplication] setStatusBarHidden:!statusBarHidden withAnimation:UIStatusBarAnimationSlide]; [self setNeedsStatusBarAppearanceUpdate]; if (IS_IOS8){ if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation)){ if (statusBarHidden){ [[UIApplication sharedApplication] setStatusBarHidden:YES]; } } } }

Estaba pensando en establecer una bandera en la que cuando la barra de estado esté oculta cuando esté en horizontal y todos los controles estén allí, en la rotación activaría la barra de estado. Sin éxito, al parecer ..

Cualquier ayuda muy apreciada.


Esta es la versión swift (3.0) de ese prefersStatusBarHidden

override var prefersStatusBarHidden: Bool{ return false }

Solo necesitas agregarlo a tu ViewController


Esto funcionó para mí:

- (void)viewWillLayoutSubviews { [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone]; }


#pragma mark After and Before Oriantation Change Methods+Delegate - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone]; } #pragma mark nav - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { [[UIApplication sharedApplication] setStatusBarHidden:NO]; }

Este es el método corto y fácil.