複数のコントローラーを使用してビューを表示および制御するマルチビュー アプリケーションを作成しました。私が抱えている問題は、シミュレーターが最初にビューをロードするときに、ヘッダーが画面上部のバーで部分的に覆われ、ベースのツールバーが画面のベースに触れていないことです。インターフェイス ビルダーのサイズ属性を使用して、iPhone が回転するときのビューを制御し、完全に機能するようにしました。すべてのスマップは、回転後に横向きモードと縦向きモードの両方で完全に配置されますが、問題は回転が発生する前の初期ロードにあります。あなたの考えは大歓迎です。トニー
4 に答える
私は何日もこの問題に取り組みました.IBをいじってもうまくいきませんでした.
最終的に、次の行を追加することで機能するようになりました。
mainViewController.view.frame = window.screen.applicationFrame;
application:didFinishLaunchingWithOptions: メソッドに。(mainViewController はプライマリ UIViewController です)。
私もこの問題に遭遇しました。具体的には、 を表示するADBannerView
と、ビュー全体が移動してステータス バーの下になり、iPhone 画面の下部にステータス バーのサイズだけの小さな空きスペースが残ります。これが私がそれを解決した方法です:(ここでのアダムの答えは私がこれを理解するのを助けました):
// In the function that displays an iAD Banner
CGRect contentFrame = self.view.bounds;
CGRect myStatusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
CGFloat statusHeight = myStatusBarFrame.size.height;
// Set the view's origin to be under the status bar.
contentFrame.origin.y = statusHeight;
ビューの原点をステータスバーの下に設定する必要があり、それで問題は解決しました。
問題は、Apple docs によると、コントローラーを「間違って」追加していることです (ただし、Apple の設計は不適切ですが、デフォルトでは、シフトする必要はありません!)
ステータスバーを表示する場合、Appleはすべてのコントローラーを「手動で」20 ピクセル下に移動することを要求しています (より正確には、ステータスバーの高さだけ - 現在は常に 20 ピクセルですが、Apple では高さを要求できます)。実行時に、UIApplication の「statusBarFrame」プロパティから)
Apple のクラス (UINavigationController / UITabBarController など) は、画面に追加されると、自動的に 20 ピクセル下に移動します。両方のクラスには、メイン コントローラーでなくてもこのシフトを行うというバグがあります。そのため、アプリは突然 20 ピクセル余分にシフトダウンし、上部に 20 ピクセルの余白が残ります。
しかし、それらがローテーションすると、それらのクラスはしばしば「うまくいき」、元の位置に戻ります。またはその逆。
何が起こっているかのより詳細な説明と、Apple が望んでいる方法でコードを記述する方法については、このリンクを参照してください。