我一直在使用以下代码来获取状态栏的高度:
[UIApplication sharedApplication].statusBarFrame.size.height
这在Portrait模式下完美运行并返回预期值(20.0),但当应用程序在Landscape中时,我得到1024.0的意外值!!
有人能够为我阐明这一点吗?
iOS版本6.1.3
XCode版本4.6.2
答案 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 ,你不能再 依赖于这些值的状态栏的方向。
答案 4 :(得分:1)
您无需检查方向,只需使用UIView方便的方法转换框架:
CGRect statusBarFrame = [self.view convertRect:[[UIApplication sharedApplication] statusBarFrame] fromView:self.view.window];
答案 5 :(得分:-1)
清理构建代码并检查是否调用orientationChange
方法。
请指定iOS版本