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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值