美文网首页iOS学习专题
iOS开启热点或语音通话引起的状态栏黑条

iOS开启热点或语音通话引起的状态栏黑条

作者: 迷路的安然和无恙 | 来源:发表于2018-07-28 14:01 被阅读64次

    bug描述

    在App正常使用中,未发现相关异常。在App开启热点或使用微信等聊天软件进行语音通话时,双击Home键进入任务管理时,会发现如下的现象:


    IMG_1595.PNG

    导致该问题的原因是,在App进入任务管理时,系统截取了当前活跃App的UI并展示出来,此时所有的App的顶部状态栏是隐藏状态,所呈现出来的管理界面只是截取的结果。

    扩展

    iOS的任务管理应该是线性表中的单链表结构,因为用户最常用的是随机删除操作,如果使用顺序表,每删除一个元素,会造成至少一半的元素移动,这也正式是顺序表的缺点。所以设计成单链表结构便于插入和删除,在新开启一个App时,该元素会在链表的尾部插入。

    上述现象的解决方法

    既然问题是由于进入任务管理时,顶部状态栏会被隐藏并截取了AppUI,那不妨在App进入挂起截屏之前,就手动将状态栏隐藏。具体做法如下:

    // 监听App挂起的状态 如果即将被挂起 执行状态栏的隐藏操作
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(setNeedsStatusBarAppearanceUpdate) name:UIApplicationWillResignActiveNotification object:nil];
    
    // 调用setNeedsStatusBarAppearanceUpdate会自动再调用 prefersStatusBarHidden方法
    // setNeedsStatusBarAppearanceUpdate是iOS7之后的API
    - (BOOL)prefersStatusBarHidden {
        CGFloat statuBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height;
        return statuBarHeight != 20;
    }
    

    结果如下

    IMG_1596.PNG

    相关文章

      网友评论

        本文标题:iOS开启热点或语音通话引起的状态栏黑条

        本文链接:https://www.haomeiwen.com/subject/dzromftx.html