5

カスタム トースト ライブラリを作成しました (非常にシンプルで、ナビゲーション バーの下に表示されるボックスのみ)。私のターゲットグループであるiOS 6でうまく動作します。しかし、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 共有アプリケーション].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であることが判明したため


これは高さと幅が一巡するためで、回答はコメントから来ました

4

3 に答える 3

12

以前に同じ「修正」を行ったので、ランドスケープで気づいた

[UIApplication sharedApplication].statusBarFrame.size.width  

 [UIApplication sharedApplication].statusBarFrame.size.height  

値が切り替わります。

于 2013-10-23T09:39:32.120 に答える
7

Travis Jeffery は、 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;
于 2014-04-22T20:39:54.647 に答える