获取iPhone状态栏高度

时间:2010-10-08 07:33:34

标签: iphone statusbar

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

[[UIApplication sharedApplication] statusBarFrame]

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

7 个答案:

答案 0 :(得分:80)

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:]不会改变任何内容,但如果它们可能不同,则此方法应该做正确的事情。

答案 1 :(得分: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);

答案 2 :(得分:6)

此方法适用于肖像和&景观定位。

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

// example call
float statusBarHeight = [self statusBarHeight];

答案 3 :(得分:6)

修改 iOS 11的方法是弄清楚视图内容的顶部位置是UIView的safeAreaLayoutGuide请参阅UIView Documentation

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

答案 4 :(得分:5)

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

答案 5 :(得分:3)

Swift 2:

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

Swift 3或Swift 4:

let statusBarHeight = UIApplication.shared.statusBarFrame.height

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

答案 6 :(得分:0)

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

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

这包含在以下标准变量中:

https://github.com/goktugyil/EZSwiftExtensions

免责声明:我的回购