LoginSignup
16

More than 5 years have passed since last update.

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

Last updated at Posted at 2013-11-01

結論

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16