iOS7とiOS8で共通のコードで動的にNavigationBarとStatusBarの表示・非表示を切り替える処理に詰まったのでまとめました。
- Info.plistの"View controller-based status bar"はNOを指定
- UIStatusBarAnimationの値はお好みで
ViewController.swift
func navigationBarAndStatusBarHidden(hidden: Bool, animated: Bool)
{
if let nv = navigationController {
if nv.navigationBarHidden == hidden {
return
}
let application = UIApplication.sharedApplication()
if (hidden) {
// 隠す
nv.setNavigationBarHidden(hidden, animated: animated)
application.setStatusBarHidden(hidden, withAnimation: animated ? .Slide : .None)
} else {
// 表示する
application.setStatusBarHidden(hidden, withAnimation: animated ? .Slide : .None)
nv.setNavigationBarHidden(hidden, animated: animated)
}
}
}