一、有關狀態欄的隱藏
-
1.1、方式一:提示:控制器之間的狀態欄不會相互影響 (下面是
iOS9
之後的設置,不支持 iOS 9以前設備)-
<1>、在
info.plist
裏面添加下面代碼爲YES
View controller-based status bar appearance
-
<2>、在控制器裏面定義一個屬性
@property(nonatomic,assign) BOOL statusHiden;
-
<3>、重寫狀態欄的一個方法
- (BOOL)prefersStatusBarHidden{ return self.statusHiden; }
-
<4>、改變狀態欄的隱藏與顯示
-
隱藏狀態欄
self.statusHiden = YES; // 刷新狀態欄 [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
-
顯示狀態欄
self.statusHiden = NO; // 刷新狀態欄 [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
-
-
-
1.2、方式二:iOS 9 之前以及iOS9 之後都支持 的你可以如下設置,提示:控制器之間的狀態欄是會 相互影響
-
<1>、在
info.plist
裏面添加下面代碼爲NO
View controller-based status bar appearance
-
<2>、在控制器裏面改變狀態欄的顯示與隱藏
-
隱藏狀態欄
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
-
顯示狀態欄
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
-
-
-
1.3、對比優缺點:
- 方式一:
優點:各自控制器之間互不影響
缺點:不支持 iOS9之前的設備 - 方式二:
優點:支持 所有的設備
缺點:各自控制器之間相互影響 - 總結:如果你的設備最低支持iOS9,那就選擇方式一就好
- 方式一:
二、有關狀態欄樣式設置
-
2.1、狀態欄樣式
typedef NS_ENUM(NSInteger, UIStatusBarStyle) { //默認樣式,黑字透明狀態欄,適合用於背景色爲亮色的頁面 UIStatusBarStyleDefault = 0, // Dark content, for use on light backgrounds //白字透明狀態欄,適合用於背景色爲暗色的頁面 UIStatusBarStyleLightContent NS_ENUM_AVAILABLE_IOS(7_0) = 1, // Light content, for use on dark backgrounds // iOS7.0以前黑底白字,iOS7以後跟UIStatusBarStyleLightContent效果一樣 UIStatusBarStyleBlackTranslucent NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 1, // iOS7.0以前啓動頁爲灰底白字,iOS7以後跟UIStatusBarStyleLightContent效果一樣 UIStatusBarStyleBlackOpaque NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 2, } __TVOS_PROHIBITED;
-
2.2、方式一:提示:控制器之間的狀態欄不會相互影響 (下面是
iOS9
之後的設置,不支持iOS 9
以前設備)-
<1>、在
info.plist
裏面添加下面代碼爲YES
View controller-based status bar appearance
-
<2>、在控制器裏面定義一個屬性
@property(nonatomic,assign) NSInteger barStyle;
-
<3>、重寫狀態欄樣式的一個方法
// 狀態欄的樣式 - (UIStatusBarStyle)preferredStatusBarStyle{ return self.barStyle; }
-
<4>、改變狀態欄的隱藏與顯示
-
狀態欄黑色樣式
self.barStyle = UIStatusBarStyleDefault; [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
-
狀態欄白色樣式
self.barStyle = UIStatusBarStyleLightContent; [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
-
-
-
2.3、方式二:iOS 9 之前以及iOS9 之後都支持 的你可以如下設置,提示:控制器之間的狀態欄是會 相互影響
-
<1>、在
info.plist
裏面添加下面代碼爲NO
View controller-based status bar appearance
-
<2>、在控制器裏面改變狀態欄的顯示與隱藏
-
狀態欄黑色樣式
[[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleDefault];
-
狀態欄白色樣式
[[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent];
-
-
-
1.3、對比優缺點:
- 方式一:
優點:各自控制器之間互不影響
缺點:不支持 iOS9之前的設備 - 方式二:
優點:支持 所有的設備
缺點:各自控制器之間相互影響 - 總結:如果你的設備最低支持iOS9,那就選擇方式一就好
- 方式一:
三、提示
- 3.1、
info.plist
文件中,View controller-based status bar appearance
項設爲YES
,則View controller
對status bar
的設置優先級高於application
的設置。
爲NO
則以application
的設置爲準,view controller
的prefersStatusBarHidden
以及preferredStatusBarStyle
方法無效,是根本不會被調用的。 - 3.2、上面測試的demo
推薦博客iOS狀態欄詳解