iOS7の時にUINavigationでステータスバーの後ろにも背景を表示させる

iOS7から画面上部のステータスバーの扱いが微妙に変わって、ステータスバーの後ろにも背景画像などを指定できるようになりました。

f:id:penpen-0704:20130919181840p:plain
こういう感じですね。

方法としては

float version = [[[UIDevice currentDevice] systemVersion] floatValue];
    if (version >= 7.0) {
        // iOS7の時
        [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"bg_navigation_bar_64.png"]
                                                     forBarPosition:UIBarPositionTopAttached
                                                         barMetrics:UIBarMetricsDefault];
    }else{
        // iOS6以下の時
        [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"bg_navigation_bar_44.png"]
                                                      forBarMetrics:UIBarMetricsDefault];
    }

というようにiOS6以下でUINavigationBarの背景を読み込ませる方法に"forBarPosition"という新しい引数が増えたメソッドを使用します。画像もステータスバー分だけ面積が増えるので、従来の320x44(640x88)の画像に加えて320x64(640x128)の画像を新たに作成してそちらを利用します。
新しいメソッドはiOS7でのみ動作するので、iOS6をアプリの対応範囲に入れる場合は、上記のように端末のOSで分岐をかけておいたほうが良いです。

f:id:penpen-0704:20130919182734p:plain
ちなみにiOS6ではこんな感じに表示されます。

ステータスバーの下にもオブジェクトがおけるようになったので、ステータスバーを表示した状態でもより統一感のあるデザインが出来るようになりましたね。