0

Nous avons un problème lorsque l'utilisateur utilise notre application sur l'iPhone et reçoit un appel sur une vue qui a été présentée par le rootviewcontroller et qui couvre le contrôleur de navigation et il est barre de navigation. La barre d'état de l'appel s'affiche et pousse la vue actuelle vers le bas, mais lorsque cette vue est supprimée de la vue d'ensemble, la barre d'état couvre la moitié de la barre de navigation.La barre de navigation de l'objectif C ne s'ajuste pas lorsque StatusBar change

Nous avons essayé d'utiliser un UIApplicationWillChangeStatusBarFrameNotification dans le délégué de l'application, puis de régler la taille du contrôleur de navigation et de la barre de navigation sans aucun effet. Nous avons également essayé de réinitialiser le cadre du contrôleur de navigation et de la barre de navigation dans la fonction viewWillAppear de la page qui présente la vue. Quelqu'un peut-il nous dire où nous allons mal?

Dans délégué App nous avons essayé cette

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
[self setupAppStyles]; 

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
self.window.backgroundColor = [UIColor ugBlue]; 
UINavigationController *navController = [[UINavigationController alloc] init]; 
self.window.rootViewController = navController; 

[self.window makeKeyAndVisible]; 

[self setUpNotifications]; 

return YES; } 

-(void) setUpNotifications { 
[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(statusFrameChanged:) 
              name:UIApplicationWillChangeStatusBarFrameNotification 
              object:nil];} 

- (void)statusFrameChanged:(NSNotification*)note { 
CGRect statusBarFrame = [note.userInfo[UIApplicationStatusBarFrameUserInfoKey] CGRectValue]; 
self.statusHeight = statusBarFrame.size.height; 

UIScreen *screen = [UIScreen mainScreen]; 
CGRect viewRect = screen.bounds; 

viewRect.size.height -= self.statusHeight; 
viewRect.origin.y += self.statusHeight; 

[[UINavigationBar appearance] setFrame:viewRect]; 

NSLog(@"The status frame has changed"); 

//[self.navController.view setFrame:viewRect]; 


self.navController.view.frame.size.height);} 

Nous avons également essayé quelque chose de similaire dans les vues des fonctions viewWillAppear aussi sans résultats positifs. Des pensées?

Répondre

0

Nous avons réussi à résoudre ce problème. Dans le viewDidAppear d'avis que nous avons mis presentViewController appelé

CGRect screenRect = [[UIScreen mainScreen] bounds]; 
    CGFloat navBarHeight = self.navigationController.navigationBar.frame.size.height; 
    CGRect frame = CGRectMake(0.0f, statusSize, screenRect.size.width, navBarHeight); 
    [self.navigationController.navigationBar setFrame:frame]; 

Lorsque la barre d'état est affichée