iOS SDK 8.1, Swift 1.1, Xcode 6.1.1です。
- Info.plistに
View controller-based status bar appearance
YES
を追加する。 - rootViewControllerがきちんと設定されているか確認する。
- ステータスバーを消したいViewのViewControllerを
UIViewController:presentViewController
で表示する場合、大概UINavigationViewController挟んでるので、navigationController.modalPresentationCapturesStatusBarAppearance = true
する。これがないと次に設定するメソッドがそもそも呼ばれない。 - ステータスバーを消したいUIViewControllerのprefersStatusBarHiddenメソッドをオーバーライドしてtrueを返す。
rootViewControllerをプログラムから設定しなおす場合は次のように書くといいらしい。
let storyBoard = UIStoryboard(name: "Foo", bundle: nil)
let viewController = storyBoard.instantiateViewControllerWithIdentifier("Bar") as UIViewController
UIApplication.sharedApplication().keyWindow!.rootViewController = viewController
参考
http://anz-note.tumblr.com/post/62524756917/ios7-o
http://lab.dolice.net/blog/2013/09/25/objc-ios7-status-bar/
http://stackoverflow.com/questions/22653993/programatically-change-rootviewcontroller-of-storyboard
P.S.
そして今は、NavigationBarが非表示のViewControllerからmodalを表示し、dismissして戻ってくるとステータスバーに食い込んでViewが表示される事象と戦っている。
追記
今このエントリを知りました(そして過去の自分がStockしていた)
http://qiita.com/makoto_kw/items/d7ed59aff27fb95c9fde