2017-09-20 70 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 –