iOS讓檢視View覆蓋狀態列statusBar(即View顯示在statusBar的前面),不是隱藏statusBar
阿新 • • 發佈:2019-02-07
專案需求,需要新建一個View,半透明的覆蓋整個螢幕,包括statusBar。如果直接在keyWindow上面addSubView,是不行的,statusBar仍然顯示在最前面。
這裡需要新建一個UIWindow,並且要設定windowLevel > UIWindowLevelStatusBar,這樣才能顯示在statusBar的前面。程式碼如下:
CHQSpeechView *view = [[CHQSpeechView alloc] initWithFrame:[UIScreen mainScreen].bounds];
static UIWindow *newWindow; // 加static的目的是讓區域性變數不要被釋放掉
if (newWindow == nil) {
newWindow = [[UIWindow alloc] initWithFrame:view.bounds];
}
newWindow.windowLevel = UIWindowLevelStatusBar + 100; // 大於UIWindowLevelStatusBar將會顯示在statusBar的前面,後面隱藏的時候,需要將此值改為小於UIWindowLevelNormal
[newWindow addSubview:view];
[newWindow makeKeyAndVisible]; // 作為關鍵Window並且顯示,後面注意要把keyWindow替換回去,不然會影響正常的window的工作
這樣子操作後,view就會顯示在statusBar的前面了。當要移除view時,注意要將keyWindow改回去,並且將newWindow的windowLevel設定為 < UIWindowLevelNormal。程式碼如下:
[[UIApplication sharedApplication].windows[0] makeKeyAndVisible]; // 將keyWindow替換為原來的window
view.window.windowLevel = UIWindowLevelNormal - 1; // 設定windows的windowLevel小於UIWindowLevelNormal
[view removeFromSuperview]; // 從window中移除檢視
當然,你的程式碼可能會和我不一樣,但是思路是一樣的:
1、新建window
2、設定window的windowLevel > UIWindowLevelStatusBar
3、將要顯示的View新增到新的window上面
4、新window呼叫makeKeyAndVisible
移除的時候:
1、將keyWindow換回去
2、設定新window的windowLevel < UIWindowLevelNormal
3、從新window中移除view