UIStatusBar狀態(tài)欄詳解及設(shè)置

statusBar的Style狀態(tài)分兩種:

(1)默認的黑色:UIStatusBarStyleDefault

default.png

(2)白色:UIStatusBarStyleLightContent

lightContent.png

statusBar設(shè)置Style地方:

(1)plist設(shè)置statusBar:

在plist文件中里增加一行 UIStatusBarStyle(或“Status bar style”),
這里可以設(shè)置兩個值: UIStatusBarStyleDefault 
和 UIStatusBarStyleLightContent。
設(shè)置后在app啟動的launch頁顯示的時候,statusBar的樣式就是plist設(shè)置的風(fēng)格。
plist.png

(2)程序代碼中設(shè)置

代碼中設(shè)置又分兩種形式

(a)UIApplication:(對所有視圖,一次性修改)
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
(b)preferredStatusBarStyle(對單個視圖,修改某個視圖的statusBarStyle)
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
以上方式修改狀態(tài)欄必須和 UIViewControllerBasedStatusBarAppearance 配合使用,不然statusBar還是默認黑色,并沒有改變。

在plist中設(shè)置鍵值對(默認值是YES)

plist.png

當UIViewControllerBasedStatusBarAppearance = NO時:

UIApplication 的setStatusBarStyle方法生效:

[[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent];

viewController的preferredStatusBarStyle方法失效


- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}

UIViewControllerBasedStatusBarAppearance = YES時:

UIApplication 的setStatusBarStyle無效;
viewController的preferredStatusBarStyle方法有效。

注意: 將UIViewControllerBasedStatusBarAppearance設(shè)置為YES,當self.window.rootViewController是一個導(dǎo)航時,我們發(fā)現(xiàn),viewController的preferredStatusBarStyle方法還是沒有效果,這需要我們類化一個UINavigationController,在這個子類里面重寫childViewControllerForStatusBarStyle方法

例:
@interface ZYNavVC ()
@end
@implementation ZYNavVC
- (UIViewController *)childViewControllerForStatusBarStyle{
    return self.topViewController;
}

這樣就可以單獨改變每個子視圖的statusBar的顏色了。

有時會遇到這種需求,觸發(fā)某個事件(點擊一個按鈕),在某個界面中不時地改變statusBar的狀態(tài),只是就要用到setNeedsStatusBarAppearanceUpdate了。

@interface ViewController ()
@property(nonatomic,assign)UIStatusBarStyle statusBarStyle;
@end

@implementation ViewController
-(UIStatusBarStyle)preferredStatusBarStyle
{
    return self.statusBarStyle;
}

-(void)statusBarChangeTarget:(UIButton *)sender
{
    sender.selected = !sender.selected;
    if (sender.selected)
    {
        self.statusBarStyle = UIStatusBarStyleDefault;
    }
    else
    {
        self.statusBarStyle = UIStatusBarStyleLightContent;
    }
    [self setNeedsStatusBarAppearanceUpdate];
}

當視圖是presentViewController 出來的時候,那就要modalPresentationCapturesStatusBarAppearance上場了。

設(shè)置modalPresentationCapturesStatusBarAppearance = YES;
//This controls whether this view controller takes over control of the status bar's appearance when presented non-full screen on another view controller. Defaults to NO.(它控制這個視圖控制器在另一個視圖控制器上顯示非全屏?xí)r是否接管狀態(tài)欄的外觀。默認為沒有。)
就可以控制里面導(dǎo)航欄狀態(tài)的變化了。

UIViewController *presentVC = [UIViewController new];
presentVC.modalPresentationCapturesStatusBarAppearance = YES;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容