2014年12月19日金曜日

AutoLayoutとSizeClasses

Xcode5からだっけ? AutoLayoutが導入され、Xcode6からはSizeClassesが導入された。
iPhone/iPadの何種類もの解像度(しかも縦横比が違ったり)に柔軟に対応するために作られた機能だ。
しかしAutoLayoutはConstraintsの設定がややこしいし、SizeClassesは出たばかりで使い方がよくわからない。
なんで縦長/横長のはずの画面をデザインするのに正方形のStoryboardに部品を置いていくのよ?

最初はiPhone/iPad、Portrait/Landscapeの全てに対応するw Any h Anyの設定で部品の配置とConstraintsをきちんと設定し、それだけではどうしようもない点のみw, hそれぞれをCompactおよびRegularに変えて必要なSizeClass(解像度)を選択し、それごとのレイアウトとConstraintsを設定してやればいいのだね。
Base valuesと書かれてるSizeClassで作り、最後はFinal valuesと書かれてるSizeClassで仕上げることになるようだ。
SizeClassごとのレイアウトと設定はきちんと覚えてくれるので、意図的に削除とかしない限りは元のSizeClassに戻れば残っている。

ただしどのConstraintsがどのSizeClassに設定されているのかがとってもわかりにくいので(一応わかる方法はあるものの)、修正する時は慎重にしないといけない。

PortraitとLandscape両方を一つのStoryboardで設定するためだろう、正方形のStoryboardに部品をレイアウトしなければならない都合上、Xcodeのプレビュー機能およびiOSシミュレーターを使わないと、ちゃんと縦長/横長の実際の画面でうまくレイアウトされているかわかんないのが難だね。

また、SizeClassごとの対応する画面サイズがFor all compact width layoutsとかFor all iPhones in portraitとか非常にざっくりしているので、例えばiPhone5sとiPhone6 Plusでレイアウトを変えたい場合に困る。
何かConstraintsの設定で吸収できるのかもしれないけど、根本的に大幅なレイアウト変更はできないんじゃないか?
解像度が大きく違うわけだから、部品の間隔を詰めたり広げたり、別な部品を追加したり…いろいろあると思うんだけど。
そもそも解像度をいろいろ増やしたiPhoneを出すこと自体、デベロッパーのことあんまり考えてないよね。そうでないとAndroidとの競争に勝てないのかもしれないけど。

0 件のコメント:

コメントを投稿