始めに
僕はSP2LCで多くの事を学んでいますが、多くの時間はiOSアプリケーションの開発を行なっています。最近iPhoneXが出てこれまでとは少し違うスクリーンサイズと形で困ってる人は多いと思います。そこでiPhoneX対応のアプリケーションを作成するために気をつけるべき事、知っておくべきことを書いていきたいと思います。多くはAppleのHuman Interface Guidelinesに載っていることですが、日本語では説明がなかった為それも含めて記事にしました。
iPhoneXの形を理解する
iPhoneXのスクリーンサイズの横は他の4.7インチディスプレイのiPhoneと同じで、縦は145ptだけ高くなっています。縦に約20%大きくなったと言うことです。
![iPhoneXScreenSize.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F218304%2F3e4d9d1f-30e8-e144-2e6c-e5ea51372d78.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=e6ed32bb6780039ab4d47c2ed1c4938a)
![iPhoneXEdge.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F218304%2Fc0e6eab5-3e6b-2de5-8225-2f969e88f097.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=a1c66e11cc3dfb89ce76ad5a9f978712)
解像度について
iPhoneXはHigh-Resolution Super Retina displayを使っていて2436 x 1125pxが5.8インチにおさまっていて458ppiになっています。このためアプリで使用するための画像は@3xの高画質な物を用意しましょう。
![iPhoneXRez.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F218304%2F2e2b5e62-4f50-6591-72fa-79b3dfcd71a4.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=b18583105b69bc93c0fca9ee19ed3bce)
Safe AreaとMargin Layout Guidesを使おう
iOS11で追加されたSafe Areaは簡単に言うとシステムで追加されているUIと被らないエリアのことです。
iPhone8においてSafe Areaは画面と同じ大きさですが、ステータスバーが表示されている時はステータスバーの高さ分低くなり、ナビゲーションバーがある場合はさらに低くなります。ここまでは無くてもそこまで大変ではありませんでした。
しかしiPhoneXの時に役に立ちます。たとえステータスバーが非表示であっても、ステータスバーの部分とホームボタンの部分はSafe Areaでは無くなります。横に表示した場合も同くセンサーの部分に被らないようになっています。
これを利用することによって、ボタンが画面外に行ってしまった、などのようなことは起こりません。
Margin Layout GuidesとはSafe Areaからのマージンを自動的に設定してくれているもので、これを利用し統一されたデザインを作りましょう。
![iPhoneXmargin.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F218304%2F22b04738-154c-4177-6fff-7e16e58d1197.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=d8a66257b72af7f7455957f38319cef9)
StoryBoardにばっかり頼らない。
これは僕が感じている事なので人それぞれ意見は違うと思います。多くの人は全てのView,UIButton,...をStoryBoard上で用意して配置して使用していると思います。確かにStoryBoardを完全に理解してAutoLayoutもきちんと使えるようになると大体の事はStoryBoardで出来ます。しかし、複雑なアプリになってくるとオブジェクトが増えてどうしてもコードで書いた方が早くて正確な場合が出てきます。iPhoneXと言う画面の形状が特殊な端末が出てきてますますオートレイアウトだけでは対応しきれずにコードを書くと言うことが多くなってきます。iPad Proが出た時点でStoryBoardでは対応しきれない部分があったと思います。そしてなんと言っても一切StoryBoardを使わないとビルド時間がすごく速くなります。
そこで最近僕はStoryBoardを使用しないと言う選択を取っています。StoryBoardを使わなくてもオートレイアウトは使えますし、Safe AreaとMargin Layout Guidesも使えます。Swiftの標準のAutoLayoutは少し書きにくい為SnapKitというライブラリをおすすめします。
最後に、コレだけはやってはいけません。
![iPhoneXDontDoThis.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F218304%2Fa21939e6-9812-6576-fd0d-528a5532be0b.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=cdb8f29289d00607b62285b6e3b33c96)
参考文献