iOS让视图View覆盖状态栏statusBar(即View显示在statusBar的前面),不是隐藏statusBar

转自我的简书:https://www.jianshu.com/p/7e39a06b2d00


项目需求,需要新建一个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

发布了17 篇原创文章 · 获赞 10 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/markinstephen/article/details/80912991
今日推荐