获取iPhone状态栏高度

Kyl*_*cot 60 iphone statusbar

我需要调整一些与iPhone状态栏高度相关的元素.我知道状态栏通常是20点高,但当它处于网络共享模式时不是这种情况.它被加倍到40.确定它的高度的正确方法是什么?我试过了

[[UIApplication sharedApplication] statusBarFrame]
Run Code Online (Sandbox Code Playgroud)

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

Tho*_*asW 81

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;
}
Run Code Online (Sandbox Code Playgroud)

现在在大多数情况下,窗口使用与屏幕相同的坐标,因此[UIWindow convertRect:fromWindow:]不会改变任何内容,但是如果它们可能不同,则此方法应该做正确的事情.

  • 在` - [UIViewController viewWillAppear:]`中调用此方法不起作用.两个问题:1.视图的窗口是`nil`然后.2.即使我在使用`if(view.window)`调用` - [UIWindow convertRect:fromWindow:]`之前,当我以横向模式弹回到视图控制器时,statusBarFrame的宽度和高度都已切换,并且调用` - [UIView convertRect:fromView:]`没有正确切换它们. (2认同)

o15*_*1s2 15

你这样做了:

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);
Run Code Online (Sandbox Code Playgroud)

  • 你也可以使用NSStringFromCGRect:`NSLog(@"Statusbar frame:%@",NSStringFromCGRect(rect));` (20认同)

Dav*_*las 6

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

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

// example call
float statusBarHeight = [self statusBarHeight];
Run Code Online (Sandbox Code Playgroud)


Jos*_*non 6

编辑 iOS 11的方法来确定视图内容的顶部位置是UIView的safeAreaLayoutGuideSee UIView Documentation.

弃用答案 如果您的目标是iOS 7+,UIViewController的文档会建议viewController的topLayoutGuide属性为您提供状态栏的底部,或导航栏的底部,如果它也可见.这可能是有用的,并且肯定比以前的许多解决方案都少.


Mar*_*tin 5

您可以测试哪两个值中的较小值,即真实高度.


小智 5

斯威夫特 2:

let statusBarHeight = UIApplication.sharedApplication().statusBarFrame.height
Run Code Online (Sandbox Code Playgroud)

斯威夫特 3 或斯威夫特 4:

let statusBarHeight = UIApplication.shared.statusBarFrame.height
Run Code Online (Sandbox Code Playgroud)

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