Size Classの使い方

投稿者: Anonymous

Adaptiveなレイアウトを作成する為に、まずAuto Layoutでレイアウトを組めるようになったので次はSize Classについて理解を深めたいと思うのですが、理解が及んでいないので質問させていただきます。
まずSize Classを使う目的は、「iPhoneとiPadのレイアウトを一つのStoryboardで作成できるようにすること」という認識でよろしいでしょうか?
また、iPhoneとiPadの縦画面、横画面に対応するアプリを作成するには「Compact Width|Regular Height」、「Regular Width|Compact Height」、「Regular Width|Regular Height」の3つのSize Classでレイアウトを作成していけばいいでしょうか?(「Any Width|Any Height」はiPadも対応するとなるとあまり使わない…?)
しかしなぜAuto Layoutのみでマルチデバイス対応ができないのでしょうか?Size Classを使う時はなにか特別なことを行うレイアウトの場合とかでしょうか?(例えばSplitViewとか?)

イマイチSize Classを使うメリットや使うシチュエーションがわからず、どう使っていいかが分かりません。
どなたか分かる方に教えていただきたいです。分からない点が多く、質問が多くてすみませんが、よろしくお願いします。

解決

まずAutoLayoutだけでマルチデバイス対応をすることも可能です。これはあくまで一例ですが、AutoLayoutだけでは対応しにくいレイアウト、例えばiPhoneでは縦に並べていたものをiPadでは横に並べる、あるいはiPadではiPhoneに存在しない項目がある、みたいなときにはSizeClassを利用するとよいです。

考え方でいうと、SizeClassはStoryBoardを差分で構築できる仕組みです。
ベースとなるStoryBoardがあり、特定のデバイスにおいて、レイアウトが大きく違ったり、項目の増減があるような場合は、1つのStoryBoardだけでそれを実現するのは難しいので、「基本的にはベースのレイアウトだけど、このサイズのときはこの部分が少し変わる」という感覚で使います。

SizeClassが道入される以前は、そういった対応は複数のStoryBoardを使い分けるか、コードで条件を分岐する必要がありました。
それを1つのStoryBoardで部分的に切り替える、ようなことができるようになったのがSizeClassのメリットです。

ただし、残念ながらXcodeのSizeClassを編集するUIはあまり分かりやすくなく、どこに別のSizeClassが使われているかを目で確認するのが難しいので、あえてSizeClassを使わずに複数のStoryBoardあるいはコードで書くという選択も有効です。

また、SizeClassはすべての画面サイズの違いや特定のデバイスに対応できるわけではないので、例えばiPhone 6だけ特別な画面を提供したい、などという場合はSizeClassだけでは対応できません。

なので上記の仕組みを理解して、SizeClassを使うとシンプルに分かりやすくなる、という場合に上手に活用することが大事になります。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *