iOS(Status Bar)を非表示にする

iOSでStatus Bar を非表示にする方法です。

ステータスバーというのは, 下の図の赤色の部分です。
statusbar

時間とか, ネットワークのloading iconとか, キャリアとかの情報が表示されます。20px分の幅があります。
iOS7ではこの部分が, 透明になって他のUIをオーバーラップできることで, iOS6.1とのCompatibleで問題になったりします。

このStatus Barをいっそのこと非表示にしてしまえば20px分有効活用できるというわけです。
方法としては, 2つあげておきます。

  1. Info.plistで設定
  2. コードで設定

筆者は, xibでViewをつくる方法で試した結果, 1でうまくいきました。stackoverflowやほかのWebサイトでは2なども試しているもの見受けられました。2ではiOS7がうまくいきませんでした。

Info.plistで設定

Status bar is initially hidden, View controller-based status bar appearanceというプロパティを追加します。
それぞれ, YES, NO にします。
Info.plistの変更の詳細は割愛します。

Property name iOS Value
Status bar is initially hidden iOS6.1以下 YES
View controller-based status bar appearance iOS7以降 NO

はい, この設定だけで, すべてのViewControllerに適用されます。

コード

確かに以前はこの方法でやっていました。
ViewControllerのprefersStatusBarHiddenというメソッドをOverrideします。
そして, 以下のコードを入れて, statusbar のupdateをかけます

if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {
        // iOS 7
        [self prefersStatusBarHidden];
        [self setNeedsStatusBarAppearanceUpdate];
} else {
        // iOS 6
        [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
}

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

以上のコードをViewControllerにいれます。setNeedsStatusBarAppearanceUpdateというのがiOS7以降のstatusbarの
アップデーをかけるメソッドです。