8

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

[UIApplication sharedApplication].statusBarFrame.size.height

这在纵向模式下完美运行并返回预期值(20.0),但是当应用程序处于横向时,我得到了 1024.0 的意外值!

有人可以为我阐明这一点吗?

iOS 版本 6.1.3

XCode 版本 4.6.2

4

6 回答 6

13

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

float statusBarHeight = MIN([UIApplication sharedApplication].statusBarFrame.size.height, [UIApplication sharedApplication].statusBarFrame.size.width);
于 2013-10-28T00:11:45.410 回答
10

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

于 2013-05-16T15:13:32.957 回答
4

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

于 2013-05-16T15:18:10.517 回答
1

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

在 iOS 6 中,旋转处理和方向检测与 iOS 5 及更低版本相比发生了显着变化,我相信您不能再依赖状态栏的方向来获取这些值。

这可能会有所帮助

于 2013-05-16T15:18:27.933 回答
1

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

CGRect statusBarFrame = [self.view convertRect:[[UIApplication sharedApplication] statusBarFrame] fromView:self.view.window];
于 2014-09-17T09:26:21.580 回答
-1

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

于 2013-05-16T14:40:48.327 回答