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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • UIView的功能 负责渲染区域的内容,并且响应该区域内发生的触摸事件 UIWindow 在iOS App中,UI...
    小蘑菇2阅读 4,160评论 4 5
  • 每一个IOS程序都有一个UIWindow,在我们通过模板简历工程的时候,xcode会自动帮我们生成一个window...
    jumping鹏阅读 4,766评论 0 0
  • 一、简介 <<UIWindow类定义,管理和协调的Windows应用程序显示在屏幕上的对象(如Windows)。一...
    无邪8阅读 5,335评论 2 3
  • 一、问题背景 最近需求量放缓,想起了以前曾经later的小需求,也就是弹出来的AlertView中间的文本框输入一...
    唐笛_Dylan阅读 18,716评论 6 29
  • iOS开发过程中,多人开发或者导入第三方框架的时候,可能碰到UIWindow层级冲突的问题。 例如,很多人习惯在k...
    小码僧阅读 14,564评论 4 26

友情链接更多精彩内容