有电话打入、开启热点、语音接入、录音开启等情况下,会出现,状态栏高度改变,界面下移的情况,解决方法。

当我们的APP正在使用的时候,突然有电话打入、开启热点、语音接入、录音开启等情况下,会出现,状态栏高度改变,界面下移的情况。如果我们没有做相关适配,那么有些界面会出现底部按钮遮挡、界面下移导致的部分数据遮挡等等情况。为了处理这种问题,下面提供一种解决思路,如有更好解决方案,万望指教。

UIApplicationWillChangeStatusBarFrameNotification 
这个通知,是监听状态栏改变的通知。通过该通知,可以获得状态栏改变的rect值。

知道了这些,我们就有了一个大致的方向。那么接下来就是如何方便快捷地解决界面下移导致的问题了。

如果项目开始前,我们就把这个情况考虑进去,那么最好的方案应该是,先写一个基类,然后把要做的操作尽量多的放入这个基类当中。
如果项目已经成形,相信你的VC也是有继承基类的吧。如果没有,你先去哭会吧。哭完了,可以开始加班了。还是去创建一个基类,然后一个一个的去使你的VC继承于他。即使你创建的这个基类现在只有这个解决界面下移的一个功能,以后也是有用的。好,不废话。

先说下主体思路,然后开始详细解释:
1.通过UIApplicationWillChangeStatusBarFrameNotification通知方法可以监听到状态栏的改变,并做处理。(其实我只是打印了状态栏的改变情况,并未在此处做什么处理。如果你有什么好的方法可以在这里统一处理,万望指点哪!)
2.由于项目中大量使用宏定义的屏幕高度导致替换不便。那么在需要的子控制器中添加方法 viewDidLayoutSubviews,就很有必要了:(-(void)viewDidLayoutSubviews//在某个类的内部调整子视图位置时,就会调用)。在该方法中,去修改要修改的控件的frame;

具体如下:

一:在BaseViewController中,监听并处理。(点击查看

1.viewDidload中添加监听,如下:
 /*
     ⚠️此处用的是 WillChange ,将要改变的状态监听。
     */
    //监听状态栏改变的通知 UIApplicationWillChangeStatusBarFrameNotification
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(layoutControllerSubViews:)
                                                 name:UIApplicationWillChangeStatusBarFrameNotification object:nil];
                                                 
2.#pragma mark  ===== 状态栏改变的通知  =====
-(void)layoutControllerSubViews:(NSNotification *)notification
{
    NSValue *statusBarFrameValue =
    [notification.userInfo valueForKey:UIApplicationStatusBarFrameUserInfoKey];
    NSLog(@"statusBarFrameValue =====  %@",statusBarFrameValue);
    //
    CGRect rect;
    [statusBarFrameValue getValue:&rect];
    
    NSLog(@"statusBarFrameValue =====  %@,rect.Height  ===  %f,self.view.height === %f",statusBarFrameValue,rect.size.height,self.view.frame.size.height);
    /*
     因为是 WillChange,你会发现,self.view.height 会是改变前的。多比较打印和界面,就可以明白了。
     */
}
这里你会发现,self.view.frame.size.height的值是会跟随状态栏的改变而改变的。

二:通过viewDidLayoutSubviews方法修改需要处理的控件的frame。(点击查看)

#pragma mark  =====  viewDidLayoutSubviews  =====
-(void)viewDidLayoutSubviews//在某个类的内部调整子视图位置时,就会调用
{
    //刷新页面布局情况,解决打电话、开热点等,导致的状态栏高度改变引起界面下移情况
    
    //1.刷新当前VC中tableview的布局
    CGFloat h = self.tabBarController.tabBar.frame.size.height;
    _tableView.frame = CGRectMake(0, SafeAreaTopHeight, SCREEN_WIDTH, self.view.frame.size.height - SafeAreaTopHeight - SafeAreaBottomHeight - - h - _footerView.frame.size.height);
    //2.刷新footerView的布局
    CGFloat tabBarH = self.tabBarController.tabBar.frame.size.height;
    [UIView animateWithDuration:0.4 animations:^{
        _footerView.frame = CGRectMake(10, self.view.frame.size.height - tabBarH - 55, SCREEN_WIDTH - 20, 50);
    }];
}

IPhoneX 的情况不考虑。为什么?自己测试下看看吧,这个机型状态栏高度不变化。
Demo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,340评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,762评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,329评论 0 329
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,678评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,583评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,995评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,493评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,145评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,293评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,250评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,267评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,973评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,556评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,648评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,873评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,257评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,809评论 2 339

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,276评论 8 265
  • 错误原因如图(图1)所示: 方法一:由于这类的崩溃信息通常难以重现, 没有任何的重现步骤,所以我们得找到发布该版本...
    Idoahc阅读 1,319评论 0 2
  • 黎明,窗外沙沙的雨声 让我更留恋被窝的温暖 真是好雨知时节…… 因为雨天,行动也匆忙起来 路边各色的雨衣来回穿行 ...
    林晓789阅读 91评论 4 2
  • 我想发明一台机器人,让外婆减少负担,让我每天不那么孤单。 这台机器人和狗狗的大小差不多,外形也和狗狗差不多,背...
    凉凉的夏天阅读 181评论 1 2
  • 印象笔记中明确写着今天距离2月26日已经128天不饮酒了,但是今天我心中莫名产生要饮酒的想法。其实这种感觉跟吃药很...
    绿茵少年阅读 365评论 0 1