iOS : ステータスバーの表示方法を変更する

画面上部に表示されるステータスバーについて、表示/非表示の切り替えや表示スタイルの変更方法を解説します。

黒の半透明のステータスバー例

初期状態でステータスバーを非表示にする

プロジェクトのInfo.plistにUIStatusBarHiddenキーを追加してYESを設定すると、ステータスバーが非表示になります。スプラッシュ画面でもステータスバーが非表示になるので、常にステータスバーを非表示にする場合におすすめです。

なお、XCodeでInfo.plistにUIStatusBarHiddenキーを追加すると、自動的に「Status bar is initially hidden」というキー名称に変更されます。

Status bar is initially hiddenキーの設定例

UI関連のキー一覧

ステータスバーの表示/非表示を動的に切り替える

UIApplicationクラスの関数やプロパティを利用して、ステータスバーの表示/非表示をプログラムから動的に切り替えることができます。

statusBarHiddenプロパティを利用して表示を切り替える

UIApplicationクラスのstatusBarHiddenプロパティにYESを設定するとステータスバーが非表示になります。NOを設定するとステータスバーが表示されます。statusBarHiddenプロパティへの変更は即座に画面に反映され、切り替えアニメーションは発生しません。なお、現在のステータスバーの表示状態はisStatusBarHiddenプロパティで取得できます。

サンプル:ステータスバーの表示状態をチェックして、表示中の場合は非表示する

if( [ UIApplication sharedApplication ].isStatusBarHidden == NO ) {
    [ UIApplication sharedApplication ].statusBarHidden = YES;
}

statusBarHidden(isStatusBarHidden)プロパティの公式リファレンス

setStatusBarHidden:withAnimation:関数を利用して表示を切り替える

UIApplicationクラスのsetStatusBarHidden:withAnimation:関数を利用すると、ステータスバーの表示/非表示をアニメーション付きで切り替えることができます。withAnimation引数にはアニメーションの種類をUIStatusBarAnimation列挙子で指定します。

UIStatusBarAnimation列挙子
UIStatusBarAnimationNone切り替えアニメーションなし
UIStatusBarAnimationFadeフェードイン/フェードアウトで切り替え
UIStatusBarAnimationSlide上下方向のスライドアニメーションで切り替え

サンプル:ステータスバーをフェードアウトで非表示にする

[ [ UIApplication sharedApplication ] setStatusBarHidden:YES
        withAnimation:UIStatusBarAnimationFade ];

setStatusBarHidden:withAnimation:関数の公式リファレンス

UIStatusBarAnimation列挙子の公式リファレンス

非推奨の関数について

なお、ステータスバーの表示/非表示を切り替えるsetStatusBarHidden:animated:関数はiOS3.2から非推奨となりました。この関数を利用すると、コンパイルで警告が発生します。

コンパイルでの非推奨メッセージ例:warning: 'setStatusBarHidden:animated:' is deprecated (declared at ・・・

iOS3.2以降ではsetStatusBarHidden:animated:関数の代わりとしてsetStatusBarHidden:withAnimation:関数を利用します。animated引数がYESの場合はwithAnimation引数にUIStatusBarAnimationFadeを、animated引数がNOの場合はwithAnimation引数にUIStatusBarAnimationNoneを指定すると同等の動作となります。

プログラム起動時のステータスバー非表示について

didFinishLaunchingWithOptionsデリゲートなどのプログラム初期化処理でステータスバーを非表示にしても、アプリ起動直後のスプラッシュ画面ではステータスバーが表示されてしまいます。これは、スプラッシュ画面が表示される段階ではプログラム初期化処理がまだ実行されていないためです。スプラッシュ画面でステータスバーを非表示にするには、Info.plistのUIStatusBarHiddenキーにNOに設定します(「初期状態でステータスバーを非表示にする」を参照)。

ステータスバーの表示スタイルを変更する

UIApplicationクラスのプロパティや関数を利用して、ステータスバーの外見を変更できます。また、プロジェクトのInfo.plistを利用して、アプリケーション起動時のステータスバーの表示スタイルを指定できます。

ステータスバーの表示スタイルは以下の3種類です。

グレー(デフォルト):(iPadでは利用不可)
グレー(デフォルト)のステータスバー
黒の半透明:(iPadでは利用不可)
黒の半透明のステータスバー
黒:
黒のステータスバー

iPadでは黒のステータスバーのみ利用できます。グレーや黒の半透明はiPadでは利用できません。

プロジェクトのInfo.plistを利用して表示スタイルを変更する

プロジェクトのInfo.plistにUIStatusBarStyleキーを追加して、ステータスバーの表示スタイルを指定できます。UIStatusBarStyleキーには以下の値を指定します。

Gray style (default)グレー(デフォルト)
Transparent black style (alpha of 0.5)黒の半透明
Opaque black style

なお、XCodeでInfo.plistにUIStatusBarStyleキーを追加すると、自動的に「Status bar style」というキー名称に変更されます。

Status bar styleキーの設定例

UI関連のキー一覧

statusBarStyleプロパティを利用して表示スタイルを変更する

UIApplicationクラスのstatusBarStyleプロパティを利用して、ステータスバーの表示スタイルをプログラムから動的に変更できます。statusBarStyleプロパティには以下のUIStatusBarStyle列挙子を指定します。

UIStatusBarStyle列挙子
UIStatusBarStyleDefaultグレー(デフォルト)
UIStatusBarStyleBlackTranslucent黒の半透明
UIStatusBarStyleBlackOpaque

サンプル:ステータスバーを黒の半透明にする

[ UIApplication sharedApplication ].statusBarStyle = UIStatusBarStyleBlackTranslucent;

statusBarStyleプロパティの公式リファレンス

UIStatusBarStyle列挙子の公式リファレンス

setStatusBarStyle:animated:関数を利用して表示スタイルを変更する

UIApplicationクラスのsetStatusBarStyle:animated:関数を利用して、アニメーション付きでステータスバーの表示スタイルを変更できます。第1引数にはUIStatusBarStyle列挙子の値を、第2引数animatedにはアニメーションの有無をYES/NOで指定します。なお、切り替えアニメーションはクロスフェード固定で変更できません。

サンプル:ステータスバーの表示スタイルをアニメーション付きで黒半透明に変更する

[ [ UIApplication sharedApplication ]
        setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:YES ];

setStatusBarStyle:animated:関数の公式リファレンス

didFinishLaunchingWithOptionsデリゲートなどのプログラム初期化処理でステータスバーの表示スタイルを変更しても、アプリ起動直後のスプラッシュ画面ではデフォルト外見(グレー)のステータスバーが表示されてしまいます。これは、スプラッシュ画面が表示される段階ではプログラム初期化処理がまだ実行されていないためです。スプラッシュ画面でのステータスバーの表示スタイルを変更するには、トInfo.plistにUIStatusBarStyleキーを追加する方法でステータスバー外見を指定します(「プロジェクトのInfo.plistを利用する」を参照)。

ステータスバーの半透明とViewサイズについて

UIViewControllerがViewを配置するとき、通常はステータスバーの領域を除外してViewを配置します。そのため、ステータスバーの表示スタイルに「黒の半透明」を指定しても、ステータスバーとViewが重ならないため半透明の効果が発揮されません。半透明の効果を発揮するには、ステータスバーとViewを重ねる必要があります。これはUIViewControllerのwantsFullScreenLayoutプロパティを利用すると簡単に実現できます。wantsFullScreenLayoutプロパティにYESを設定すると、UIViewControllerのルートViewが画面いっぱいに展開され、ステータスバーとViewが重なるように配置されます。

サンプル:wantsFullScreenLayoutをYESに設定する

// UIViewController
- ( void )loadView
{
    [ super loadView ];
    self.wantsFullScreenLayout = YES;
    // 以下、初期化処理

wantsFullScreenLayoutプロパティの公式リファレンス