2

iOS6で発生したと思われるナビゲーションバーの位置の問題があります。
これは、一部のユーザーが一部のビューを回転するときに経験する問題と同様に多くの方法で機能します

アプリにはスプラッシュ画面があり、全画面表示されます(に設定Hide statusbar during application launchすると達成されますTrue

次にviewDidLoad、マスタービューコントローラーで、次の行にステータスバーをアプリに追加します。

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];

これにより、StatusBarがアプリに追加され、期待どおりにビューが20ポイント下にシフトします。ただし、NavigationBarは、ステータスバーの下に配置されたままで、20ポイントのグリッチが下にあります。

statusBarを追加することによって作成されたグリッチ

iOS6以前は、次のコード行を追加してこれを修正していました。

[UIApplication sharedApplication].keyWindow.frame=CGRectMake(0, 20, 320, [[UIScreen mainScreen] bounds].size.height-20);

ただし、これは機能しません。

いくつかの調査によると、呼び出しの時点でviewDidLoadkeyWindow.frameは{0,0}のサイズと起源の両方を持っており、それを変更しても効果がないことが示されています。

上記の2行を挿入するviewDidAppearと、アプリの起動時に同じ動作が発生します。ただし、別のビューに移動して最初のビューに戻ると、の変更によってkeyWindow.frame目的の効果が得られ、NavigationBarが本来あるべき位置に配置されます。

私の質問:StatusBarが最初に非表示になっているときにiOSアプリにStatusBarを追加した後、NavigationBarを正しい位置に配置するにはどうすればよいですか?

4

2 に答える 2

1

代わりに、viewWillAppearでsetStatusBarHidden:NOを呼び出します。

于 2013-02-08T13:41:26.553 に答える
1

私は再び仕事に飛び込んでいるようです:

view[Will|Did]Appearからの呼び出しによってステータスバーがすでに表示されているため、他のメソッド()で行うことの効果は適用されませんviewDidLoad。そこからコードを削除してから、から目的の効果を得ましたviewDidAppear。以前に呼び出されたメソッドはいずれも、子フレームを変更しません。viewDidLoad(またはviewWillAppearのフレームを変更しません[UIApplication sharedApplication].keyWindow.frame

したがって、これはで行う必要がありviewDidAppearます。以前に呼び出されたいくつかのメソッドでステータスバーがまだ表示されていないことを確認してください...

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO];
    [UIApplication sharedApplication].keyWindow.frame=CGRectMake(0, 20, 320, [[UIScreen mainScreen] bounds].size.height-20);
}
于 2013-02-08T14:01:32.193 に答える