質問: 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を使うとシンプルに分かりやすくなる、という場合に上手に活用することが大事になります。