2013-10-23 7 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; 
} 

私は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

あなたはあなたの答えを投稿することができた場合、私はそれを受け入れることができ –

+0

を切り替えている。これは本当です、ありがとうこの回答は、ステータスバーの高さを正しく報告するiOS 8では機能しません。 – Haagenti

答えて

12

私は以前に同じ修正を行っていたので、私はそれを気づいたことがある。

[UIApplication sharedApplication].statusBarFrame.size.width 

[UIApplication sharedApplication].statusBarFrame.size.height 

値が切り替わります。

「ステータスバーのフレームと高さにトリックはあなたにそれを変換してきたことを確認することです。

+0

私の推測では、その風景の中に[のUIApplication sharedApplication] .statusBarFrame.size.widthで、[のUIApplication sharedApplication] .statusBarFrame.size.height値は –

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

代わりに、ステータスバーの高さに対応するView ControllerのtopLayoutGuide.lengthを使用することもできます。

関連する問題