2017-09-20 35 views
2

要得到的iOS应用程序的状态栏的height,我们做了解幻数隐藏在状态

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

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

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

现在让我们说,我们有一个NavigationControllerUICollectionView内置。我们试图找出收集视图中contentOffset指向的位置。

let contentOffset = self.collectionView!.contentOffset 
let statusBarHeight = UIApplication.shared.statusBarFrame.height 

与正常状态栏,结果是:

contentOffset:(0.0,-64.0)

statusBarHeight:20.0

含义是,NavigationBar的高度是64.0

利用扩展状态栏:

contentOffset:(0.0,-64.0)

statusBarHeight:40.0

通知的contentOffset仍然(0.0, -64.0)但不(0.0, -84.0)。这意味着扩展状态栏后面有无法访问的空间。我相信我们无法弄清楚这个无法到达的空间的实际尺寸。

我们只能猜测它是20.0,因为我们在实践中已经知道这个数字。

enter image description here

enter image description here

所以我们说,我们要吸取正确的状态栏下面的美景。但使用statusBarHeight给出的信息,我们不能这样做,因为整个视图会缩小它的高度神奇的 20px我们不知道。

如果我们想放置框架(0, statusBarHeight, 100, 100)的视图,如果状态栏处于正常状态,这将置于状态栏的正下方。但是如果状态栏有扩展了,这将失败,因为现在statusBarHeight40

现在,我们必须添加幻数象下面这样:

myView.frame = CGRect(x: 0, y: statusBarHeight - 20, width: 100, height: 100) 

所以我的问题是:

我们如何计算这个神奇的数字?

回答

2

您的应用程序委托可以实现这些方法:

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

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

  • UIApplicationWillChangeStatusBarFrameNotification
  • UIApplicationDidChangeStatusBarFrameNotification

在这里你去statusBarHeight用于计算神奇的数字

更多检查这个Get notification status Bar Height change

+0

约'when'这一变化发生是这些方法会给你的信息,并高度将如果展开,则为'40.0'。但是我想知道整个视图在它的高度上缩减了多少,而不是40.0,它是20.0。 – sCha

+0

你测试过任何状态栏20,但没有打印。例如录音或其他任何东西。更多检查这一个https://stackoverflow.com/questions/3888517/get-iphone-status-bar-height?rq=1 –