国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS-UIStatusBar詳細總結

2019-11-08 00:18:33
字體:
來源:轉載
供稿:網友

1、UIStatusBar簡介

iOS上的statusBar就是指的最上面的20像素高的部分,分為兩個部分 - 前景部分:就是指顯示信號、時間、電量等的狀態部分 - 后景部分:就是顯示黑色或者圖片的背景部分

2、UIStatusBar前景

2.1 UIStatusBarStyle

UIStatusBar的前景部分實際就是通過UIStatusBarStyle來修改,iOS7之后就兩種style,

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 UIStatusBarStyleBlackTranslucent NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 1, UIStatusBarStyleBlackOpaque NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 2,}

UIStatusBarStyleDefault 默認黑色字體 UIStatusBarStyleLightContent 白色字體

2.2 修改啟動頁的UIStatusBarStyle

【General】 –>【Deployment Info】–>【Status Bar Style】 啟動頁statusBar.png 此處可設置啟動頁的statusBarStyle以及hidden屬性,Requires full screen在支持分屏多任務時需要勾選。Info.plist處修改 Info.png

**兩處修改是同步的,修改其中一處,另一處會隨之變化。 此處的修改只針對啟動頁有效,對viewController不起作用。**

2.3 viewController的UIStatusBarStyle

修改viewController的statusBar有兩種方式 - 方式一:通過viewController的-(UIStatusBarStyle)preferredStatusBarStyle方法 - 方式二:通過UIapplication方式

重點強調: Info.plist里有個View controller-based stats bar appearance屬性,沒有可以自己添加,默認是YES,表示通過方式一設置的UIStatusBarStyle優先級高于方式二,當設為NO時反之。

2.3.1方式一詳解

此時View controller-based stats bar appearance值要為YES,此值默認是YES,Info.plist沒添加該屬性時,即為YES 主要有五個方法,在ViewController里重寫即可。

//返回statusBarStyle- (UIStatusBarStyle)preferredStatusBarStyle//返回是否Hidden- (BOOL)prefersstatusBarHidden//更新statusBarStyle- (void)setNeedsStatusBarAppearanceUpdate//- (nullable UIViewController *)childViewControllerForStatusBarStyle;- (nullable UIViewController *)childViewControllerForStatusBarHidden;

這里說明一下setNeedsStatusBarAppearanceUpdatechildViewControllerForStatusBarStyle兩個方法。 1. - (void)setNeedsStatusBarAppearanceUpdate 如果在viewController已經顯示在當前頁面,你可能還要在當前頁面不時的更改statusBar的前景色,那么,你首先需要調用下面的setNeedsStatusBarAppearanceUpdate方法(這個方法會通知系統去調用當前UIViewControllerpreferredStatusBarStyle方法),從而改變statusBarstatusBarStyle。 具體用法:

-(void)changeStatsBar { _isChange = !_isChange; [self setNeedsStatusBarAppearanceUpdate]; }-(UIStatusBarStyle)preferredStatusBarStyle { return _isChange?UIStatusBarStyleLightContent:UIStatusBarStyleDefault;}- (nullable UIViewController *)childViewControllerForStatusBarStyle; 這個接口也很重要,默認返回值為nil。當我們調用setNeedsStatusBarAppearanceUpdate時,系統會調用application.windowrootViewControllerpreferredStatusBarStyle方法,我們的程序里一般都是用navigationControllerroot,如果是這種情況,那我們自己的viewController里的preferredStatusBarStyle根本不會被調用。這種情況下我們需要在navigationController里重寫該方法,返回當前正在顯示的viewController. 如:-(nullable UIViewController *)childViewControllerForStatusBarStyle { return self.topViewController;}

這里再次強調一下: 當用navigationController做root時,在viewController里重寫上述幾個方法是無效的,如若單獨改變某個viewControllerstatusBarStyle必須在navigationController里重寫childViewControllerForStatusBarStyle方法實現

2.3.2方式二詳解

首先設置View controller-based stats bar appearance值為NO,否則通過此方式設置的屬性都不會生效。 在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法里設置相關屬性方法開更改statusBar的style和hidden

@interface UIApplication(UIApplicationDeprecated)// 顯示設置statusBarOrientation@property(readwrite, nonatomic) UIInterfaceOrientation statusBarOrientation;- (void)setStatusBarOrientation:(UIInterfaceOrientation)interfaceOrientation animated:(BOOL)animated;// 設置statusBarStyle@property(readwrite, nonatomic) UIStatusBarStyle statusBarStyle;- (void)setStatusBarStyle:(UIStatusBarStyle)statusBarStyle animated:(BOOL)animated;//設置statusBarHidden@property(readwrite, nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden;- (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation;@end

通過UIApplication的方式,我們發現在iOS9以后全部都廢除了,看來蘋果官方并不推薦我們這么做。UIApplication的方式是一種全局控制,這樣的方式也確實不怎么好。

3、更改UIStatusBar后景

3.1 默認方式

UIStatusBar的背景默認會顯示navigationBar的背景或self.view的背景。所以可以通過修改navigationBarself.view的背景修改statusBar的背景。

當有navigationBar時,通過下面兩個方法修改: setBarTintColor - (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics 關于navigationBar背景顏色的問題,更加詳細的內容可以參考IOS-UINavigationController詳解

沒有navigationBar時,通過self.view.backgroundColor修改。

3.2 KVO的方式修改

方法如下:

-(void)setStatusBarBackgroundColor:(UIColor *)color { UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"]; NSLog(@"statusBar.backgroundColor--->%@",statusBar.backgroundColor); if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) { statusBar.backgroundColor = color; }}

此方法修改過后,如無特別設置,其余所有的statusBar都會該設置后的顏色。

3.3 UIView覆蓋statusBar的方式

方法如下:

-(void)setStatusBarBackgroundColor:(UIColor *)color { UIView * statusBarView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, -20)]; statusBarView.backgroundColor = [UIColor orangeColor]; [self.navigationController.navigationBar addSubview:statusBarView];}

只修改當前navigationController的statusBar

參考文章: ios上 更改 狀態欄(UIStatusBar)的顏色,你值得一看、收藏 iOS7下隱藏status bar的詳細研究 ios 狀態欄statusBar的背景顏色


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜丰县| 托克逊县| 遂川县| 亳州市| 久治县| 大厂| 庆城县| 平遥县| 股票| 花垣县| 日照市| 新绛县| 林西县| 道孚县| 辽阳县| 永定县| 镇赉县| 阳信县| 邵阳市| 德昌县| 韩城市| 舟曲县| 库尔勒市| 普陀区| 乌拉特前旗| 驻马店市| 三门峡市| 晋中市| 桐梓县| 香港 | 雷山县| 凤山市| 渝中区| 保康县| 房产| 桃园市| 娱乐| 三亚市| 高密市| 隆化县| 米泉市|