获取iPhone状态栏高度

我需要调整一些与iPhone状态栏高度有关的元素。 我知道状态栏通常高20点,但是在共享模式下情况并非如此。 它变成了40倍。确定它的高度的正确方法是什么? 我试过了

[[UIApplication sharedApplication] statusBarFrame] 

但它给了我20×480的景观,这是正确的,然后它给了我320×40的肖像。 为什么不给我这个相反的(40×320)?

statusBarFrame返回屏幕坐标中的帧。 我相信正确的方法来获得这对应的视图坐标是做到以下几点:

 - (CGRect)statusBarFrameViewRect:(UIView*)view { CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame]; CGRect statusBarWindowRect = [view.window convertRect:statusBarFrame fromWindow: nil]; CGRect statusBarViewRect = [view convertRect:statusBarWindowRect fromView: nil]; return statusBarViewRect; } 

现在在大多数情况下,窗口使用与屏幕相同的坐标,所以[UIWindow convertRect:fromWindow:]不会改变任何东西,但是如果它们可能不同,这个方法应该做正确的事情。

你是否这样做:

 CGRect rect; rect = [[UIApplication sharedApplication] statusBarFrame]; NSLog(@"Statusbar frame: %1.0f, %1.0f, %1.0f, %1.0f", rect.origin.x, rect.origin.y, rect.size.width, rect.size.height); 

你可以testing哪个是两个值中较小的一个,这将是真正的高度。

此方法适用于纵向和横向。

 -(float) statusBarHeight { CGSize statusBarSize = [[UIApplication sharedApplication] statusBarFrame].size; return MIN(statusBarSize.width, statusBarSize.height); } // example call float statusBarHeight = [self statusBarHeight]; 

如果您的目标是iOS 7+,UIViewController的文档build议viewController的topLayoutGuide属性为您提供状态栏的底部或导航栏的底部(如果它也是可见的)。 这可能是有用的,肯定比许多以前的解决scheme更less。

Swift 2:

 let statusBarHeight = UIApplication.sharedApplication().statusBarFrame.height 

Swift 3:

 let statusBarHeight = UIApplication.shared.statusBarFrame.height 

build议:不要忘记注入UIApplication.shared不要只在你的代码中使用单例。

这是Swift版本,如果有人需要它:

 var screenStatusBarHeight: CGFloat { return UIApplication.sharedApplication().statusBarFrame.height } 

这是作为一个标准variables包含在:

https://github.com/goktugyil/EZSwiftExtensions

免责声明:它是我的回购