了解隐藏在状态栏中的幻数

时间:2017-09-20 08:30:05

标签: ios iphone swift statusbar

要获取iOS应用程序状态栏的height,我们执行

let height = UIApplication.shared.statusBarFrame.height
print(height)

,这会在正常情况下返回20.0

如果状态栏由于通话中或个人热点条件而展开,则会返回40.0

现在让我们说我们有一个内置NavigationController的{​​{1}}。我们试图找出集合视图的UICollectionView指向的位置。

contentOffset

使用正常状态栏,结果为:

  

contentOffset:(0.0,-64.0)

     

statusBarHeight:20.0

意味着let contentOffset = self.collectionView!.contentOffset let statusBarHeight = UIApplication.shared.statusBarFrame.height 的身高为NavigationBar

随着状态栏的扩展:

  

contentOffset:(0.0,-64.0)

     

statusBarHeight:40.0

请注意,contentOffset仍然是64.0,但不是(0.0, -64.0)。这意味着扩展状态栏后面有无法访问的空间。而且我相信我们无法确定无法访问的空间的实际大小

我们只能猜测它是(0.0, -84.0),因为我们在实践中已经知道了这个数字。

enter image description here

enter image description here

因此,我们想在状态栏下方绘制一个漂亮的视图。但是使用20.0给出的信息,我们不能这样做,因为整个视图会缩小我们不知道的魔法 20px的高度。

如果我们要放置框架statusBarHeight的视图,如果状态栏处于正常状态,则会将其放置在状态栏的正下方。但是,如果状态栏的已展开,则会失败,因为现在(0, statusBarHeight, 100, 100)statusBarHeight

现在我们必须添加幻数,如下所示:

40

所以我的问题是:

我们如何计算这个幻数?

1 个答案:

答案 0 :(得分:2)

您的app委托可以实现以下方法:

  • -application:willChangeStatusBarFrame:
  • -application:didChangeStatusBarFrame:

并且这些本地通知也将发送到默认通知中心:

  • UIApplicationWillChangeStatusBarFrameNotification
  • UIApplicationDidChangeStatusBarFrameNotification

您可以转到statusBarHeight获取计算幻数

更多检查此Get notification status Bar Height change

相关问题