2013-10-23 31 views
5

我做了一個自定義的吐司庫(非常簡單,只是一個框出現在導航欄下)。在iOS 6中這是我的目標羣體正常工作。但是自iOS 7發佈以來,它無法正確顯示。如何解決iOS 7狀態欄的高度和寬度問題

我試圖修復它是通過這個代碼的方式:

if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7,0")){ 
    self.offset = [UIApplication sharedApplication].statusBarFrame.size.height + self.viewController.navigationController.navigationBar.frame.size.height; 
} 

我做了一個宏可以在Stack Overflow上找到以檢測是否iOS版本爲7,然後添加狀態欄的高度和導航高度。這在iOS 7中的縱向模式下正常工作,但是當我切換到橫向偏移量時,它變爲512 ?.

有沒有人可以解釋這種情況發生,我怎麼能解決這個問題?


決定拆分代碼,因爲評論,看看究竟是什麼導致了差異。我做的是:

CGFloat statusBarHeight = [UIApplication sharedApplication] .statusBarFrame.size.height;

CGFloat navBar = self.viewController.navigationController.navigationBar.frame.size.height; 
self.offset = statusBarHeight + navBar; 
NSLog(@"Init - statusBarHeight: %f, navBar: %f", statusBarHeight, navBar); 

事實證明某種原因狀態欄處於縱向20和橫向是480


這是因爲高度和寬度轉身,答案來自評論

+1

我的猜測是,在景觀[UIApplication的sharedApplication] .statusBarFrame.size.width和[UIApplication的sharedApplication] .statusBarFrame.size.height值切換 –

+0

這是真的,謝謝,如果你可以發表你的答案,我可以接受它 – Haagenti

回答

12

正如我以前所做的一樣「修復」,我注意到在景觀

[UIApplication sharedApplication].statusBarFrame.size.width 

[UIApplication sharedApplication].statusBarFrame.size.height 

值被切換。

+0

這個答案不適用於正確報告狀態欄高度的iOS 8。 –

7

特拉維斯·傑弗裏提供了一個極好的說明上 http://travisjeffery.com/b/2013/05/using-the-status-bars-frame-in-ios/

讓我從他的網站複製:

「訣竅狀態欄的框架和高度,以確保你已經將它轉換成協調您關心的視圖的空間,這可能是UIViewController的視圖或子視圖。「

CGRect statusBarFrame = [yourView.window convertRect:UIApplication.sharedApplication.statusBarFrame toView:yourView]; 
CGFloat statusBarHeight = statusBarFrame.size.height; 
2

另一種方法是使用視圖控制器的topLayoutGuide.length,它應該對應於狀態欄的高度。