Objective-C
iPhone
iOS

iOS7で動的にステータスバーを消すとviewが移動してしまう

More than 5 years have passed since last update.


結論

UIViewControllerのautomaticallyAdjustsScrollViewInsetsプロパティをNOにして解決した。

追記:iOS7のナビゲーションバーやステータスバーについては下記内容が包括的

http://qiita.com/yimajo/items/254c7cebab7864678246


説明

iOS7になってステータスバーの取り扱いが変わったため、画像のフルスクリーン時にステータスバーを表示/非表示の切り替えをするのにしばらくやり方が分からなかった。

次の3つの条件が揃っていたので嵌ってしまった。


  • ステータスバーを動的に非表示非表示を繰り返す

  • ナビゲーションバーを表示する

何も考えず、動的ににステータスバーを非表示にした場合、次のように中央においているつもりの画像用Viewがステータスバーぶん上にずれる。

左がステータスバー有り。右がステータスバーを非表示にした。

yes_st_on_of.jpeg

左右共に、青いViewの開始位置はナビゲーションバーに潜り込んでおらず、ナビゲーションバーがステータスバーのY位置下に配置されているため、ステータスバーを消すとナビゲーションバーと共にViewが移動してしまう。

原因は、iOS7からナビゲーションバーに配慮してViewのinsetsを自動で設定されるためらしい。

これをステータスバーやナビゲーションバーを無視するようにして表示非表示を切り替えても違和感なくするためにViewControllerのプロパティautomaticallyAdjustsScrollViewInsetsをNOにすることで解決。

no_st_on_of.jpg

インターフェースビルダー上にAdjust Scroll View Insetsのチェックボックスがあるのでこれをチェック外してもいい。自動でスクロールバーのInsetsを調整するフラグだと憶えておこう。

スクリーンショット 2013-11-01 18.42.55.png