2017-09-16 126 views
6

從iOS 11開始,當我關閉它時,我的應用中的狀態欄異常。當狀態欄被解除時,狀態欄的背景變清晰。 TestStatusBarBug:它沒有在iOS的10隱藏在iOS上時狀態欄背景消失11

status bar bug

我重建問題非常簡單的應用程序,我已經在Github上載做到這一點。這裏是所有相關代碼:

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 

有其他人遇到這個問題?有沒有修復或解決方法?

回答

4

我看着這個項目,通過改變你的視圖顏色,我可以確定你看到的白色是來自視圖中的按鈕(它是背景顏色)。

當您隱藏狀態欄時,導航欄仍然位於其舊位置(現在20像素過低),因此視圖的白色背景顯示爲透過。然後導航欄佈局/移動,白色消失。

爲什麼在iOS 11中這種行爲已經發生了變化,我不能說,但對於在主要iOS更新期間更改視圖操作後的機制,這種情況並不罕見。幸運的是,有一個簡單的解決方案。

當您執行狀態欄可見性更改的動畫時,還強制導航欄進行佈局。這將導致它被正確定位,並且動畫看起來是正確的。

只需將這些最後兩行添加到您的切換代碼的​​佈局導航欄。

- (IBAction)toggleStatusBar { 
    _statusBarHidden = !_statusBarHidden; 

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

+0

太棒了!正是我在找的,謝謝! –

+0

謝謝!這對我也很有用:) – Grubas