iPadでは、ステータスバーは半透明にできない


iPhone / iPad Universalアプリで、ステータスバーを半透明にしようとしたところ、iPadのみ半透明にできませんでした。

ログをよく見ると、

UIStatusBarStyleBlackTranslucent is not available on this device.

というエラーが。
ドキュメントにはそれらしい記述が見つからなかったのですが、
どうやらiPad端末はUIStatusBarStyleBlackTranslucentに未対応のようです。

ただ、動画や画像などを見せる画面を作る場合、数秒後にステータスバーを隠すため、
その時に画面ぴったりになるよう、ステータスバーの裏側にもコンテンツを表示したいと思い、
とりあえず、viewWillAppear:とviewDidAppear:で次のようなフックを入れて回避しました。

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.navigationController.navigationBar setBarStyle:UIBarStyleBlackTranslucent];
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:YES];
    } else {
        [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:YES];
    }
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
        [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:YES];
    }
}

見た目的には少しいまいちなので、他に良い方法があれば探したいです。

デザインも頼めるシステム開発会社をお探しならBPS株式会社までどうぞ 開発エンジニア積極採用中です! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

夏のTechRachoフェア2019

週刊Railsウォッチ

インフラ

ActiveSupport探訪シリーズ