9

Zuerst - das ist KEINE Frage über die überlappende Statusleiste der Navigationsleiste (wie viele andere). UINavigationBar (von meinem Navigationscontroller) ist perfekt ausgerichtet, wie ich will.ios7 UINavigationBar hört nach einer Weile auf, sich unter der Statusleiste zu erstrecken

Das Problem ist mit meinem Navigationsleiste benutzerdefinierten Hintergrund.
Das Hintergrundbild (oder die Navigationsleiste selbst) hört auf, in der Statusleiste nach dem Zufallsprinzip zu laufen (nach einigen Sekunden, nachdem meine Anwendung gestartet wurde oder wenn ich die modalen Navigationssteuerungen darüber ausgeblendet habe). Mein benutzerdefiniertes Bild hat die richtigen Abmessungen für iOS (640x128px).

1. Initial-Look (gewünscht - custom 640x128px Hintergrund schön unter Statusleiste erweitert):

enter image description here

2. Nach einer Weile (flackert von selbst):

enter image description here

Was könnte solch ein zufälliges Flackern von UINavigationBar Hintergrundbild verursachen?

Ich verwende folgenden Code meinen Hintergrund zu konfigurieren:

// Load resources for iOS 7 or later 
    [[CustomNavigationBar appearance] setBackgroundImage:[self imageNamed:@"bg_top_ios7.png"] forBarMetrics:UIBarMetricsDefault]; 
    [[CustomNavigationBar appearance] setBackgroundImage:[self imageNamed:@"bg_top_ios7.png"] forBarMetrics:UIBarMetricsDefaultPrompt]; 
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES]; 

Meine Statusleiste Einstellungen in der Info.plist-Datei:

enter image description here

ich auch habe folgende Einstellungen in meiner UIViewController Unterklasse init Methode (nicht sicher, ob es darauf ankommt):

-(id)init{ 
//DLog(@"BaseViewController init..."); 
    if (self = [super init]) { 

     popToRoot = modal = NO; 
     rootIndex = 0; 
     indexInBottomNavigation = 0; 
     [Crashlytics setObjectValue:@"init" forKey:NSStringFromClass([self class])]; 


     // iOS 7 adoptions: 
     if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) 
      self.edgesForExtendedLayout = UIRectEdgeNone; 

     if ([self respondsToSelector:@selector(extendedLayoutIncludesOpaqueBars)]) 
      self.extendedLayoutIncludesOpaqueBars = YES; 

     if ([self respondsToSelector:@selector(automaticallyAdjustsScrollViewInsets)]) 
      self.automaticallyAdjustsScrollViewInsets = NO; 


    } 
    return self; 
} 

Meine View-Controller sind in den UINavigationController eingebettet (der sich um die UINavigationBar-Positionierung kümmert). Ich benutze auch ECSlidingViewController (offenbaren Container) als Container für meine Navigation Controller, aber ich bin mir nicht sicher, ob es darauf ankommt.

Antwort

12

Es stellte sich heraus, dass ich clipsToBounds = YES der Navigationssteuerung der Navigationsleiste (irgendwo in der app) zu ändern:

navigationController.navigationBar.clipsToBounds = YES;

Damit UINavigationBar seinen Hintergrund unter Statusleiste erweitern seine clipsToBounds muss gesetzt werden, zu NO (das ist die Standardeinstellung). Stellen Sie sicher, dass Sie nicht herumspielen.

Lösung einfach wie:

navigationController.navigationBar.clipsToBounds = NO;

Verwandte Themen