我知道目前 iPhone/iPad 顶部的状态栏(包括时间、电池和网络连接)对于非视网膜屏幕是 20 像素,对于视网膜屏幕是 40 像素,但为了将来证明我的应用程序我希望能够在没有硬编码值的情况下确定这一点。是否可以通过编程方式计算出状态栏的高度?
最佳答案
[UIApplication sharedApplication].statusBarFrame.size.height
。但由于所有尺寸都以磅为单位,而不是以像素为单位,因此状态栏高度始终等于 20。
更新。看到这个答案被认为有帮助,我应该详细说明。
状态栏高度确实等于 20.0f 点除了以下情况:
- 已使用
setStatusBarHidden:withAnimation:
方法隐藏状态栏,其高度等于 0.0f 点; - 正如@Anton 在这里指出的那样,在电话应用程序之外的来电期间或在录音 session 期间,状态栏高度等于 40.0f 点。
还有一个状态栏会影响 View 高度的情况。通常, View 的高度等于给定方向的屏幕尺寸减去状态栏高度。但是,如果您在显示 View 后为状态栏设置动画(显示或隐藏它),状态栏将更改其框架,但 View 不会,您必须在状态后手动调整 View 大小栏动画(或在动画期间,因为状态栏高度在动画开始时设置为最终值)。
更新 2. 还有一个用户界面方向的情况。状态栏不考虑方向值,因此 portrait 模式的状态栏高度值为 [UIApplication sharedApplication].statusBarFrame.size.height
(是的,默认方向始终为纵向,无论您的应用 info.plist 说什么),landscape - [UIApplication sharedApplication].statusBarFrame.size.width
。要在 UIViewController
外部和 self.interfaceOrientation
不可用时确定 UI 的当前方向,请使用 [UIApplication sharedApplication].statusBarOrientation
。
iOS7 更新。尽管状态栏的视觉样式发生了变化,但它仍然存在,其框架的行为仍然相同。我得到的关于状态栏的唯一有趣发现 – 我分享:您的 UINavigationBar
的平铺背景也将平铺到状态栏,因此您可以实现一些有趣的设计效果或只是给你的状态栏上色。这也不会以任何方式影响状态栏高度。
关于ios - 如何以编程方式获取 iOS 状态栏高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12991935/