質問: iOS開発でレイアウトを作成するときにどのようにレイアウトを組んでいくのかが分からず、質問させていただきたいです。 レイアウト作成を色々と試しているのですが、iPhone4s、iPhone5、iPhone6、iPhone6plusの画面で作成したレイアウトを見てみると、レイアウトがそれほど大きく崩れてはいないものの、各画面で少しレイアウトが違ってしまいます。 まず配置したUIの大きさが、全てのデバイスで同じサイズになってしまうので、iPhone4sとiPhone6plusの画面で見たときに、iPhone4sでは普通のサイズのUIなのに、iPhone6plusでは小さなサイズのUIになってしまいます。色々と調べたところ、これは`SizeClass`で対応するのかなと思ったのですが、`SizeClass`では結局全てのiPhoneは`width/Compact, height/Regular`になってしまうので一つずつの端末のUIサイズを指定することができませんでした。`SizeClass`はあくまでiPhoneとiPadや縦画面と横画面を識別するものであって、各iPhone端末のサイズごとにどうこうするものではないのでしょうか? また以前から気になっていたのですが、`Storyboard`で`ViewController`を選択したときに`attributes inspector`に`Simulated Metrics`があると思うんですけど、レイアウトを作成していくときはそこのSizeの欄にある`Inferred`を基準にしてレイアウトを作成していくのでしょうか?(デフォルトでも常に選択されていますし) 僕が今レイアウト作成について考えていることは、まず`Inferred`の`ViewController`にUIを配置していき、必要に応じて`SizeClass`でiPhoneやiPadに切り替えてレイアウトを作成していくのではないかということです。 上記の記事のレイアウト作成後の画面を見ても、それぞれの画面サイズでUIの大きさが全て一緒であり、`AutoLayout`+`SizeClass`だけでは全ての端末で同じレイアウトを組むことは難しいのでしょうか? レイアウト作成について色々と試しているのですが、分からないことだらけで、どなたか分かる方に教えていただきたいです。すみませんが、よろしくお願いします。
回答: 基本的にデザインにもよるとは思いますがUIパーツのサイズ(UISwitch,UISliderなど)はデバイス間では変えません。画像も@2x、@3xなどで解像度は変わるものの見た目上の大きさは変わりません。 ですのでデバイス間でMargin(余白)を上手く調整するのが同じレイアウトを組むと言えるのかもしれません。絶対値で考えず三分割してViewを置くとか相対的に考えるのがいいです。 同じレイアウトという表現が難しいですが、`SizeClass + AutoLayout`を使って一つの画面(storyboard内のViewControllerなど)で全端末に対応させれば同じレイアウトといえますね。 どうしてもStoryboardで対応できない部分や動的に変わる部分は、`viewDidLayoutSubviews`内などで位置を調整したりもします。