获取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
免责声明:它是我的回购