0

Wir haben ein Problem, wenn der Benutzer unsere App auf dem iPhone verwendet und einen Anruf empfängt, während er sich in einer vom rootviewcontroller angezeigten Ansicht befindet und den Navigationscontroller abdeckt Navigationsleiste. Die Statusleiste für den Anruf zeigt und schiebt die aktuelle Ansicht nach unten, aber wenn diese Ansicht aus der Superansicht entfernt wird, umfasst die Statusleiste die Hälfte der Navigationsleiste.Objective C Die Navigationsleiste passt nicht an, wenn sich die Statusleiste ändert

Wir haben versucht, eine UIApplicationWillChangeStatusBarFrameNotification im App-Delegaten zu verwenden und dann die Größe des Navigationscontrollers und der Navigationsleiste ohne Auswirkungen zu ändern. Wir haben auch versucht, den Frame des Navigationscontrollers und der Navigationsleiste in der viewWillAppear-Funktion der Seite zurückzusetzen, auf der die Ansicht angezeigt wird.

Kann uns jemand sagen, wo wir falsch liegen?

In App Delegierten haben wir versucht, diese

- (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);} 

Wir haben etwas Ähnliches auch versucht, in den Ansichten auch viewWillAppear Funktionen ohne positive Ergebnisse. Irgendwelche Gedanken?

Antwort

0

Wir konnten dieses Problem lösen. Im viewDidAppear der Ansicht, dass presentViewController nannten wir setzen

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]; 

Wenn die Statusleiste

gezeigt
Verwandte Themen