まいまいワークス

主にiPhoneアプリの開発で考えた事、調べた事、感じた事などを記していきます。

アプリ実行中にステータスバーのサイズが変更された際の対処

通話中やテザリング中などはステータスバーのサイズが変更されるので ビューの表示の際には [[UIScreen mainScreen] applicationFrame].size.height

を使ってアプリケーションエリアのサイズを取得し、これを基準にビューの表示を行いましょう!と言うおはなし。

但し、ビューの表示中にステータスバーの変更があった場合は 通知かデリゲートでイベントをフックし必要があれば再描画等の処理を行います。 (通知の設定を行った際は通知解除も忘れずに)

通知の設定

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarWillChange) name:UIApplicationWillChangeStatusBarFrameNotification object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarDidChange) name:UIApplicationDidChangeStatusBarFrameNotification object:nil];

デリゲートメソッド

- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame{
//  NSLog(@"appHeightDidChange=%f",[[UIScreen mainScreen] applicationFrame].size.height);
}

- (void)application:(UIApplication *)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame{
//  NSLog(@"appHeightWillChange=%f",[[UIScreen mainScreen] applicationFrame].size.height);
}