iOS中的状态栏的正常高度是20,但并不是固定高度的,至少在通话中和有热点连接时,它的高度就会变成40。这时APP的UI会整体下移,造成UI显示异常。
这是一个细节,我查看了自己手机上那些知名APP,发现还有好多没做处理。
处理的:
- 微信
- QQ
- 淘宝
- 支付宝
没处理的:
- 网易新闻
- 京东
- 苏宁
- 携程
虽然这只是一个很不起眼的功能,但可以看出做产品的人有没有认真做,而不只是把功能做给用户看。
说完了处理这个东西的重要性,那么做起来是否简单呢?
问题1:怎么获取状态栏高度?
状态栏的高度并非永远都是20,当有热点连接或者通话时,它的高度就会变成40。所以取得状态栏高度的标准方法如下,可以用宏来封装。1
[UIApplication sharedApplication].statusBarFrame.size.height
问题2:怎么知道状态栏发生了变化?
是通知。1
2UIApplicationWillChangeStatusBarFrameNotification
UIApplicationDidChangeStatusBarFrameNotification
我们可以监听其中某个通知,然后相应的去改变当前视图的布局。
- 问题3:是不是需要每个页面都要去注册通知?
这个问题应该具体问题具体分析,但如果真的需要一个一个页面去改,我觉得肯定是程序结构出了问题。就我目前的项目而言,只是在根容器类中加了通知并处理了底部的tabbar。其他页面虽然有时也有问题,但很多都是自身实现方式有问题,和状态栏变化没有直接关系。1
2
3
4- (void)statusBarFrameWillChange:(NSNotification*)notification
{
[self hideTabbar:self.statusBarHidden animated:YES];
}