我一直在使用以下代码来获取状态栏的高度:
[UIApplication sharedApplication].statusBarFrame.size.height
这在纵向模式下完美运行并返回预期值(20.0),但是当应用程序处于横向时,我得到了 1024.0 的意外值!
有人可以为我阐明这一点吗?
iOS 版本 6.1.3
XCode 版本 4.6.2
我一直在使用以下代码来获取状态栏的高度:
[UIApplication sharedApplication].statusBarFrame.size.height
这在纵向模式下完美运行并返回预期值(20.0),但是当应用程序处于横向时,我得到了 1024.0 的意外值!
有人可以为我阐明这一点吗?
iOS 版本 6.1.3
XCode 版本 4.6.2
如果您想忘记方向或坐标相关问题,请使用此选项:
float statusBarHeight = MIN([UIApplication sharedApplication].statusBarFrame.size.height, [UIApplication sharedApplication].statusBarFrame.size.width);
您可能需要使用[UIApplication sharedApplication].statusBarFrame.size.width
横向方向。与[[UIScreen mainScreen] applicationFrame]
在横向上给出切换值相同
这是完全正确的。是statusBarFrame
在屏幕坐标中。您必须使用statusBarOrientation
来检查是否应该切换坐标。
你在应用程序的什么时候得到这个? 如果是第一次运行,请检查您的 .xib 文件在项目中的方向。如果它们是纵向的,那么即使应用程序以横向启动,它也没有时间确定方向并使用它创建最前面的视图控制器视图的 .xib 的尺寸。
在 iOS 6 中,旋转处理和方向检测与 iOS 5 及更低版本相比发生了显着变化,我相信您不能再依赖状态栏的方向来获取这些值。
您不需要检查方向,只需使用 UIView 方便的方法来转换框架:
CGRect statusBarFrame = [self.view convertRect:[[UIApplication sharedApplication] statusBarFrame] fromView:self.view.window];
清洁构建您的代码并检查是否orientationChange
调用了方法。请同时指定 iOS 版本