SlideShare a Scribd company logo
やはりお前らのiOS7対応
は間違っている
potatotips #3

株式会社キュリオシティソフトウェア
今城 善矩
自己紹介
•

株)キュリオシティソフトウェア代表取締役(@yimajo)
•

•

iOSアプリの受託開発とアクセス解析サービス作ってます

最近趣味とか仕事でiOS7に対応させたアプリは3つ、新規に
iOS7用に作ったのは1つ

•

QiitaにiOS7ネタも公開してます http://qiita.com/yimajo
お前らが何を間違っているか
•

iOS7でUINavigationBarにself.viewが潜り込むという話
http://techblog.yahoo.co.jp/ios/ios7yahoo/

•

対処方法としてUIViewControllerのプロパティ
edgesForExtededLayoutをUIRectEdgeNoneとしてる

•

これはけっして良いやり方じゃない
色んなブログでも
iOS7対応でself.viewが潜り込まないようにと
edgesForExtededLayout=UIRectEdgeNone
にしたり
IBでUnder Top Barsをチェック外したり
してて
「これのデメリットは
すりガラス表現が失われる
ことです」
とか書いちゃってる
お前ら釣られすぎ
m9(^Д^)
パターン別
ベストプラクティスを
考えてみた
Adjust Scroll View
Insets

UITableViewContr
oller

UIViewControllerで
View配置

Under Top Bars

✓チェック

✓チェック

まずiOS7用にコン
✓チェック

✓チェック

UIScrollViewなど
で全画面写真表示
したい時


iOS6の対応には

チェック外す

✓チェック

ポーネント配置し
直しからの 調整
iOS6のみUse Full
ScreenをYES
パターン別に説明する前に
まずiOS7から追加された
UIViewControllerのプロパティの
基本的なことを振り返れ
Adjust Scroll View Insetsとは
•

これをチェックしていると、
自動的にUIScrollView系の
contentInsetsを調整してくれ
る

•

ナビゲーションバーがあれば、
ナビゲーションバーの高さ分だ
けcontentInsets.topを調整
Under Top Barsとは

•

Viewの上端をどこから始める
かという設定

•

UnderはZ軸での奥という意味

•

UIRectEdgeNoneはこの
チェック全部外すことになる
実際の設定を交えてベストプラク
ティスの説明をしたほうがわか
りやすいかもしれん
UITableViewの場合
•

IBでAdjust Scroll View Insetsをチェックする
•

•

automaticallyAdjustsScrollViewInsets = YES;

IBでUnder Top Barsをチェック
•

edgesForExtededLayout = UIRectEdgeTopもしくは
UIRectEdgeAll
Adjust Scroll View Insetsと
Under Top Barsを共にチェックする

TableViewはTopからはじまり、InsetsTopが調整される
のでNavigationBarの裏側にも表示されスクロール領域
になってくれる
Adjust Scroll View Insetsがどうであれ
Under Top Barsがオフの時

Under Top Barsがオフの時、TableViewはNavigationBar
のy軸下側からはじまるのでスクロール領域にならず、
黒の背景が半透明で表示され黒っぽくなる。
決して「すりガラス表現が失われる」わけではない
UIViewControllerの
場合
•

プロパティはUITableVIewのときと同じ

•

view上の各コンポーネントの座標値を全画面iOS7基準で
調整する(下げる)

•

iOS6はその座標値に対して ⊿ で調整する
UIScrollViewやUIColletionView
で写真などの全画面表示をしたい
場合のみ
•

IBでAdjust Scroll View Insetsをチェック外す
•

•

automaticallyAdjustsScrollViewInsets = NO;

IBでUnder Top Barsをチェック(UIRectEdgeNone駄目)
•

edgesForExtededLayout = UIRectEdgeTop;
Adjust Scroll View Insetsをチェックせず

Adjust Scroll View Insetsと

Under Top Barをチェックした場合

Under Top Barを共にチェックした場合

右図Adjust Scroll View Insetsをチェックすると
全画面表示のUIScrollViewもInsetsを考慮されてしまう
タップしたらナビゲーションバーが消える場合、
画像は上に向かって動く
iOS6も対応する場合
•

iOS7をメインそれを元にiOS6に対応する(逆じゃない)

•

iOS7は基本全画面表示状態でデザイン調整、必要であれ
ば配置を修正し、iOS6は でY座標位置を調整する

•

Scroll系なら でなくInsetsで対応できる

•

iOS6で写真などを全画面表示したい場合は今までどお
り、非推奨のUse Full Screenを使う
まとめ
UIScrollView系はInsetsによってスク
ロール開始点をずらすので
Adjust Scroll View Insetsによって適
切に設定されるようになっている
iOS7からは全画面表示なので
それに逆らわず設定し
iOS6用に調整をしてあげよう
ちなみに
Under Top BarsをオフにするとAdjust
Scroll View Insets関係なくなるから
お前らはすぐ釣られるでしょ?
m9(^Д^)
おわり

参考:やはりお前らのMVCは間違っている
http://www.slideshare.net/MugeSo/mvc-14469802

More Related Content

やはりお前らのiOS7対応は間違っている