iOS狀態(tài)欄顯示隱藏的小問(wèn)題

一、狀態(tài)欄狀態(tài)修改

狀態(tài)欄的字體為黑色:UIStatusBarStyleDefault
狀態(tài)欄的字體為白色:UIStatusBarStyleLightContent

APP啟動(dòng)頁(yè)狀態(tài)欄顏色設(shè)置
在info.plist添加 Status bar style,改變style值,就可以改變顏色,默認(rèn)是Gray style

一、在info.plist中,將View controller-based status bar appearance設(shè)置為NO,白色,YES,黑色
如果View controller-based status bar appearance為YES。
則[UIApplication sharedApplication].statusBarStyle 無(wú)效。

解決個(gè)別VC中狀態(tài)欄字體顏色不同的辦法
二、在app delegate中:

[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;

三、在個(gè)別狀態(tài)欄字體顏色不一樣的vc中

-(void)viewWillAppear:(BOOL)animated
{
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
}
-(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
}

用下面的方法:
1、在vc中重寫(xiě)vc的preferredStatusBarStyle方法。
-(UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleDefault;
}
2、在viewDidload中調(diào)用:[self setNeedsStatusBarAppearanceUpdate];

但是,當(dāng)vc在nav中時(shí),上面方法沒(méi)用,vc中的preferredStatusBarStyle方法根本不用被調(diào)用。
原因是,[self setNeedsStatusBarAppearanceUpdate]發(fā)出后,
只會(huì)調(diào)用navigation controller中的preferredStatusBarStyle方法,
vc中的preferredStatusBarStyley方法跟本不會(huì)被調(diào)用。

解決辦法有兩個(gè):
方法一:
設(shè)置navbar的barStyle 屬性會(huì)影響status bar 的字體和背景色。如下。
//status bar的字體為白色
//導(dǎo)航欄的背景色是黑色。
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;

//status bar的字體為黑色
//導(dǎo)航欄的背景色是白色,狀態(tài)欄的背景色也是白色。
//self.navigationController.navigationBar.barStyle = UIBarStyleDefault;

方法二:
自定義一個(gè)nav bar的子類(lèi),在這個(gè)子類(lèi)中重寫(xiě)preferredStatusBarStyle方法:

MyNav* nav = [[MyNav alloc] initWithRootViewController:vc];
self.window.rootViewController = nav;

@implementation MyNav

- (UIStatusBarStyle)preferredStatusBarStyle
{
UIViewController* topVC = self.topViewController;
return [topVC preferredStatusBarStyle];
}

二、實(shí)例:改變狀態(tài)欄與隱藏導(dǎo)航欄

需求:

VC1 隱藏導(dǎo)航欄,狀態(tài)欄白色
push 到VC2 顯示導(dǎo)航欄,狀態(tài)欄黑色

實(shí)現(xiàn):

1.設(shè)置:

在info.plist中設(shè)置View controller-based status bar appearance 為 YES
下面改變狀態(tài)欄顏色的代碼才能生效

2.代碼:
//隱藏導(dǎo)航欄
- (void)viewWillAppear:(BOOL)animated {
    
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:YES animated:YES];

}

//改變狀態(tài)欄顏色
- (UIStatusBarStyle)preferredStatusBarStyle {
  
    return UIStatusBarStyleLightContent;
}

問(wèn)題:

在VC2中使用左邊欄重按手勢(shì),會(huì)出現(xiàn)bug, 導(dǎo)航欄會(huì)消失

解決:

1.設(shè)置:

在info.plist中設(shè)置View controller-based status bar appearance 為 NO
下面改變狀態(tài)欄顏色的代碼才能生效

2.代碼:
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    
    //隱藏導(dǎo)航欄
    [self.navigationController setNavigationBarHidden:YES animated:YES];
    //改變狀態(tài)欄顏色
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容