在Landscape(iPad)中statusBarFrame.height返回1024.0

时间:2013-05-16 14:36:43

标签: ios ipad orientation statusbar

我一直在使用以下代码来获取状态栏的高度:

[UIApplication sharedApplication].statusBarFrame.size.height

这在Portrait模式下完美运行并返回预期值(20.0),但当应用程序在Landscape中时,我得到1024.0的意外值!!

有人能够为我阐明这一点吗?

iOS版本6.1.3

XCode版本4.6.2

6 个答案:

答案 0 :(得分:13)

如果您想忘记方向或坐标相关问题,请使用此选项:

float statusBarHeight = MIN([UIApplication sharedApplication].statusBarFrame.size.height, [UIApplication sharedApplication].statusBarFrame.size.width);

答案 1 :(得分:10)

您可能需要在横向方向上使用[UIApplication sharedApplication].statusBarFrame.size.width。与[[UIScreen mainScreen] applicationFrame]相同,可以在横向方向上显示切换值

答案 2 :(得分:4)

这是完全正确的。 statusBarFrame位于屏幕坐标中。 您必须使用statusBarOrientation来检查是否应该切换坐标。

答案 3 :(得分:1)

在应用程序的什么时候你会得到这个? 如果它是第一次运行,请检查.xib文件在项目中的方向。如果它们是纵向的,那么即使应用程序是在横向启动的,它也没有时间确定方向并使用.xib的尺寸来创建最前面的视图控制器视图。

  

在iOS 6中,旋转处理和方向检测发生了变化   显着地从iOS 5及更低版本,我 beleive ,你不能再   依赖于这些值的状态栏的方向。

this may help

答案 4 :(得分:1)

您无需检查方向,只需使用UIView方便的方法转换框架:

CGRect statusBarFrame = [self.view convertRect:[[UIApplication sharedApplication] statusBarFrame] fromView:self.view.window];

答案 5 :(得分:-1)

清理构建代码并检查是否调用orientationChange方法。 请指定iOS版本