hachinoBlog

hachinobuのエンジニアライフ

iOS7でステータスバーとViewが重ならないようにする方法

iOS7でNavigationControllerを使用していない場合は、ステータスバーと描画しているViewが下記のように重なってしまう。

f:id:hachinobu:20140115145932p:plainf:id:hachinobu:20140115145600p:plain

私が行った対処法はViewControllerのselfのViewの上にもう一つ同じ大きさのBaseとなるViewを配置し、そのBaseViewの上に表示したいView群を配置してコードでiOS7以降であればBaseViewのY座標と高さをステータスバーの高さ分調整するといったことをした。

f:id:hachinobu:20140115151237p:plain

やり方

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    //iOS7以降での処理
    if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
        //ステータスバーの高さを取得
        float statusBarHeight = MIN([UIApplication sharedApplication].statusBarFrame.size.height, [UIApplication sharedApplication].statusBarFrame.size.width);
        //ステータスバーの高さ分、BaseViewのY座標をたす
        CGPoint viewPoint = (CGPoint) { CGRectGetMinX(_baseView.frame), CGRectGetMinY(_baseView.frame) + statusBarHeight };
        //ステータスバーの高さ分、BaseViewのHeightをへらす
        CGSize viewSize = (CGSize) { CGRectGetWidth(_baseView.frame), CGRectGetHeight(_baseView.frame) - statusBarHeight };
        
        //反映
        _baseView.frame = (CGRect) { viewPoint, viewSize };
    }
    
}

@end

これでステータスバーと表示しているViewが重なることはなくなる。

f:id:hachinobu:20140115151529p:plain

サンプルコード

StatusbarUnderView

Auto LayoutはOFFにしている環境です。