2010-08-06 79 views
9

HIG(第47页)说我必须能够处理在电话或录音过程中出现的双高度状态栏。如何检测双高度状态栏?

我到底该如何处理这种情况?

我真的只有一个屏幕,其中带有工具栏的键盘在双高度状态栏显示时位于文本框下方 - 在其他屏幕上,事情只是有点缩小但可用。

如果我可以检测到双高度状态栏存在,我可能可能调整文本框的位置或使它们暂时更短,但可以检测双高度状态栏是否在那里?

编辑:也许如果有一种方式来获得已知事物的绝对坐标,如导航栏,并且如果它是+20像素关闭,我会假设双高度状态栏存在。思考?

和次要问题,如果这个(或任何东西)的作品,我只是想用

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO] 

隐藏常规状态栏,但我并不想隐瞒都 - 基本上是一个偷懒的方法不必触摸我的任何一个屏幕 - 如果双重存在,通过隐藏常规状态栏再次使它成为一个单独的屏幕。上面的代码会隐藏两者吗?

回答

16

可以监视UIApplicationDelegate这些回调:

  • 应用:willChangeStatusBarFrame:

  • 应用:didChangeStatusBarFrame:

而且很容易在iPhone上测试此模拟器:硬件 - >切换通话状态栏

根据您的情况,您的视图及其中的内容可以自动调整大小以适应空间 - 检查Interface Builder中各种对象上的检查器窗口的视图大小区域

+0

这是否会解决用户处于打电话或在录音的过程中,THEN进入我的应用程序?或者它只会在应用中监控一次更改? – 2010-08-06 02:20:25

+0

好的,也许你可以检查UIApplicationStatusBarFrameUserInfoKey – 2010-08-06 03:37:15

+0

感谢指出我在正确的方向。在进入应用程序之前处理呼叫始发,在某些viewDidLoad的我只是检查状态栏框架的大小 - 如果超过20,相应地假定正在进行调用和大小视图。我在代表遇到问题。当方法放在我的AppDelegate中时,它会触发,而不是在我需要的类中时,即使我在该类中采用UIApplicationDelegate,也不知道如何处理在每个类中开始或结束的调用 - 从在我想改变视图的类的AppDelegate中的方法? – 2010-08-06 18:38:14