导航及statusBar小知识

iOS 11 没有这种问题

1.通话或录音时 打开某一App 此时状态栏frame.height 会从20 增加为40,applicationFrame.height 会减少20.

新创页面:
如果没有用autolayout 在布局的时候可以用 [UIScreen mainScreen].applicationFrame 代替 [UIScreen mainScreen].bounds。bounds为整个屏幕的尺寸 ,applicationFrame 为 减去statusBar之后的高度. 例如 :bounds:{0,0,320,480} applicationFrame:{0,20,320,460} - normal {0,40,320,440} - in-call 。

页面已创建:
如果没有使用autolayout 在页面创建后 接打电话 可以通过VC的方法
– (void)viewWillLayoutSubviews 来拿到最新的view.frame 然后更新子控件布局,适应高度减少的20。

也可以通过监听statusBar 变化来更新控件

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(statusBarFrameWillChange:) name:UIApplicationWillChangeStatusBarFrameNotification object:nil];

UIApplicationWillChangeStatusBarFrameNotification 监听得到改变后的新 frame
UIApplicationDidChangeStatusBarFrameNotification 监听得到改变前的旧 frame

利用 触发 selector 中传入的 notification参数,即
NSValue *rectValue = [noti.userInfo objectForKey:UIApplicationStatusBarFrameUserInfoKey] 获得监听到的新/旧 frame.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • //设置尺寸为屏幕尺寸的时候self.window = [[UIWindow alloc] initWithFra...
    LuckTime阅读 838评论 0 0
  • 1.iPhone尺寸规格 设备 宽 � 高 对角线 逻辑分辨率(poin...
    水中的蓝天阅读 1,133评论 0 0
  • 1.不可变数组转变为可变数组声明实例变量的数组 必须记得实现 对于遍历数组找到对象后 如果还需要查找 记得先结束 ...
    小新xin阅读 754评论 0 1
  • 一、梦里不知身是处 深夜,电闪雷鸣,天空被闪电撕成一片片的,一道道惨白惨白的光敲打着玻璃窗。躺床上无法入眠,小心脏...
    树海云天阅读 314评论 0 3
  • 一打开窗, 我就看见了身处于漫天雪花中的你。 冷冷的风吹过我耳边, 就像是你的暖暖言语。 凛冽的稀薄空气, 好似是...
    阿俊xi阅读 207评论 0 1