2010-07-11 7 views
8

http://www.irovr.com/stackOverflow/overlap.png¿por qué mi navigationBar está debajo de mi barra de estado?

- (void)viewDidLoad { 
     [super viewDidLoad]; 
     [self setWantsFullScreenLayout:YES]; 
     [mainScrollView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onMainScrollTap:)]]; 
    } 

- (void)onMainScrollTap:(id)sender { 
    if(self.navigationController.navigationBar.hidden){ 
     [self.navigationController setNavigationBarHidden:NO animated:YES]; 
     [self.navigationController setToolbarHidden:NO animated:NO]; 
     [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade]; 
    }else{ 
     [self.navigationController setNavigationBarHidden:YES animated:YES]; 
     [self.navigationController setToolbarHidden:YES animated:YES]; 
     [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; 
    } 
} 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent]; 
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; 

    self.navigationController.navigationBar.translucent = YES; 
    self.navigationController.toolbar.translucent = YES; 
} 

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [self.navigationController setNavigationBarHidden:YES animated:YES]; 
    [self.navigationController setToolbarHidden:YES animated:YES]; 
} 

- (void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; 
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade]; 
    self.navigationController.navigationBar.translucent = NO; 
    self.navigationController.toolbar.translucent = NO; 
    [self.navigationController setNavigationBarHidden:NO animated:YES]; 
    [self.navigationController setToolbarHidden:YES animated:NO]; 
} 

Respuesta

11

Parece que ocultar la barra de estado y la barra de navegación al mismo tiempo causa este problema. Pude resolverlo ocultando/mostrando la barra de navegación con performSelector:withObject:afterDelay, incluso con un retraso de 0

+8

Esto funcionó para mí también. Pude hacer que "vuelva a encuadrar" estableciendo 'navigationBarHidden' en SÍ y luego NO de inmediato. –

0

Su punto de vista es demasiado grande, por lo que se está haciendo dibujarán debajo de la barra de estado. Si está utilizando Interface Builder para crearlo como .xib, debe habilitar la configuración de la barra de estado en "Elementos de interfaz simulados", o simplemente reducir el alto de su vista manualmente.

+0

Eso no es cierto. Mi opinión está dimensionada apropiadamente. Tal vez debería haber mencionado que esto solo ocurre cuando he ocultado el estado y las barras de navegación y las vuelvo a mostrar. La vista está pensada para alternar entre pantalla completa y no, al igual que la aplicación de fotos. –

5

Usar "performSelector" funcionará.

Sin embargo, algunos pueden encontrar más fácil agregar lo siguiente a "viewWillDisappear" incluso si ya hay una instrucción que muestra la barra de navegación.

[self.navigationController setNavigationBarHidden:YES animated:NO]; 
[self.navigationController setNavigationBarHidden:NO animated:NO]; 
0
- (void)fixNavigationBarUnderStatusbarBug 
{ 
   //This method fix bug! Don't cut it 
   //Bug: Statusbar hide navigationBar after device rotation. 
   if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { 
       NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; 
       NSOperationQueue *mainQueue = [NSOperationQueue mainQueue]; 
       [center addObserverForName:UIDeviceOrientationDidChangeNotification object:nil 
                            queue:mainQueue usingBlock:^(NSNotification *note) { 
                                UIApplication *currentApplication = [UIApplication sharedApplication]; 
                                if (currentApplication.statusBarHidden) { 
                                    [currentApplication setStatusBarHidden:NO]; 
                                    double delayInSeconds = .1; 
                                    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); 
                                    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
                                        [currentApplication setStatusBarHidden:YES]; 
                                    }); 
                                } 
                            }]; 
   } 
} 
Cuestiones relacionadas