Ios 在横向模式下,statusBarFrame.height返回1024.0(iPad)

Ios 在横向模式下,statusBarFrame.height返回1024.0(iPad),ios,ipad,orientation,statusbar,Ios,Ipad,Orientation,Statusbar,我一直在使用以下代码获取状态栏的高度: [UIApplication sharedApplication].statusBarFrame.size.height 这在纵向模式下非常有效,并返回预期值(20.0),但当应用程序处于横向模式时,我得到了1024.0的意外值 有人能帮我解释一下吗 iOS版本6.1.3 XCode 4.6.2版清理构建代码并检查是否调用了orientationChange方法。 请同时指定iOS版本您可能需要在横向上使用[UIApplication sharedAppl

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

[UIApplication sharedApplication].statusBarFrame.size.height

这在纵向模式下非常有效,并返回预期值(20.0),但当应用程序处于横向模式时,我得到了1024.0的意外值

有人能帮我解释一下吗

iOS版本6.1.3


XCode 4.6.2版

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

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

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

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

在iOS 6中,旋转处理和方向检测已更改 值得注意的是,从iOS 5及更低版本开始,我相信您不能再 这些值取决于状态栏的方向


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

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

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

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

我已经尝试了一个干净的构建,并且定向更改方法肯定会被调用。我编辑了最初的帖子来展示iOS版本(6.1.3)@Ollie:然后尝试退出重新启动
Xcode
或使用更低版本的构建。这不是Xcode版本的情况,也不是需要干净的构建。这些症状出现在我的其他项目和我同事的项目中。你自己试试看。Tamara Bernad有正确的解决方案我们需要
高度
方向有什么关系,因为
高度
是一样的?嗨,抱歉刚才看到评论。。。不知道你说“因为身高一样”是什么意思。方向很重要,因为statusBarFrame使用屏幕坐标内的帧。在纵向上,高度为20,但在横向上,宽度为@Ollie正在搜索的值。两个方向上状态栏的高度相同。只有宽度改变。谢谢塔玛拉。似乎由于活动的.xib保存在纵向中,statusBarFrame将始终显示该帧,就像它也保存在纵向中一样。我刚刚检查了statusBarFrame,如果返回横向,则返回宽度作为高度。完美:)似乎在iOS 8.0(尚未更新为8.0.2)中,宽度/高度没有横向切换。因此,状态栏高度为statusBarFrame.size.height,以方向为准。所以你必须检查iOS版本。这个答案是正确的,我把它和塔玛拉·伯纳德的答案结合起来,得到了我需要的。许多感谢访问此代码段返回的帧的高度与此处的其他答案执行相同的操作,但它更清楚地描述了正在发生的事情+1.