2017-09-16 6 views
6

Ab iOS 11 verhält sich die Statusleiste in meiner App falsch, wenn ich sie ablehne. Der Hintergrund der Statusleiste wird deaktiviert, während die Statusleiste geschlossen wird. Es tat dies nicht in iOS 10.Der Statusleistenhintergrund verschwindet beim Verstecken auf iOS 11

status bar bug

ich das Problem in einer sehr einfachen Anwendung neu erstellt haben, die ich auf Github hochgeladen haben: TestStatusBarBug. Hier alle relevanten Code:

AppDelegate.m

@implementation AppDelegate 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    [[UINavigationBar appearance] setBarTintColor:[UIColor grayColor]]; 
    return YES; 
} 

@end 

ViewController.m

#import "ViewController.h" 

@interface ViewController() { 
    BOOL _statusBarHidden; 
} 

@end 

@implementation ViewController 

-(BOOL)prefersStatusBarHidden 
{ 
    return _statusBarHidden; 
} 

-(UIStatusBarAnimation)preferredStatusBarUpdateAnimation 
{ 
    return UIStatusBarAnimationSlide; 
} 

- (IBAction)toggleStatusBar { 
    _statusBarHidden = !_statusBarHidden; 

    [UIView animateWithDuration:0.35 animations:^{ 
     [self setNeedsStatusBarAppearanceUpdate]; 
    }]; 
} 

@end 

Hat jemand dieses Problem erfahren? Gibt es eine Lösung oder einen Workaround?

Antwort

4

Ich schaute auf das Projekt, und indem ich Ihre Ansichtsfarben änderte, konnte ich feststellen, dass die weiße Farbe, die Sie sehen, aus der Ansicht mit dem Knopf kommt (es ist die Hintergrundfarbe).

Wenn Sie die Statusleiste ausblenden, befindet sich die Navigationsleiste immer noch an ihrem alten Standort (jetzt 20 Pixel zu niedrig), sodass der weiße Hintergrund der Ansicht durchscheinen kann. Dann fährt die Navigationsleiste hoch und das Weiß verschwindet.

Warum dieses Verhalten in iOS 11 geändert wurde, kann ich nicht sagen, aber es ist nicht ungewöhnlich, dass sich Mechaniker hinter Ansichtsoperationen während eines größeren iOS-Updates ändern. Zum Glück gibt es eine einfache Lösung.

Wenn Sie die Animation für die Sichtbarkeitsänderung der Statusleiste ausführen, müssen Sie auch die Navigationsleiste in das Layout zwingen. Dadurch wird es korrekt positioniert und die Animation wird korrekt aussehen.

Fügen Sie einfach diese letzten zwei Zeilen hinzu, um die Navigationsleiste an Ihren Toggle-Code anzupassen.

- (IBAction)toggleStatusBar { 
    _statusBarHidden = !_statusBarHidden; 

    [UIView animateWithDuration:0.35 animations:^{ 
     [self setNeedsStatusBarAppearanceUpdate]; 
     [self.navigationController.navigationBar setNeedsLayout]; 
     [self.navigationController.navigationBar layoutIfNeeded]; 
    }]; 
} 

+0

Fantastic! Genau das, was ich gesucht habe, danke! –

+0

Danke! Das funktioniert auch für mich :) – Grubas

Verwandte Themen