iOS10からはiPhone4Sが対象外となったため、「これで3:2のレイアウトを考えなくて済む!」と喜んだ開発者は少なくないことだろう。
もちろん私もその一人だ。

しかし、そこには落とし穴があった。
以下の画像のように対応デバイスをiPhoneにしているとiPad Air上では3:2の互換モードで動いてしまうのだ。
iPadiPhoneGokan_xcodeproj
これだと何が困るのか。
例えばStoryboardで以下のようなレイアウトを考えてみよう。
iPhoneIpadSS02

このレイアウトの場合、色つきの部分の縦の合計は540でステータスバーの20を加えても560だから、iPhone5以降の端末はもちろん問題なく表示できる。

以下はiPhone5での動作例だ。
iPhoneIpadSS03
これをiPad Airの互換モードで動かすとこうなる。
iPhoneIpadSS04
ご覧のように黄色部分が隠れてしまっている。
これは3:2の解像度(320x480)となっているため、縦が足りないのだ。

ではUniversalモードで動かすとどうなるか。
iPhoneIpadSS05
結果はこのようになる。
iPhoneIpadSS06
iPad Airは縦1024なので、当然問題なく表示される。

さて、ここで私たちの取れる選択肢は2つある。
  • あくまでiPadは対象外として、縦480で収まるレイアウトにする
  • iPadを考慮したレイアウトにする
前者は一時的には楽な道と言えるだろう。
Cocoaの中にはiPadで独特の動きをするものもあるから、それらも除外できるからだ。

一方後者はどうだろう。
横幅が広くなった場合のレイアウトを考えるといっても、基本的には横に伸ばすだけでいい場合がほとんどだろう。
その場合、UILabel等で表示できる情報量が増えるというメリットもあるし、「iPadでの表示に対応したアプリ」となるとアプリのグレードが少し上がるような印象を持ってもらえる。

仮に受託で開発しているアプリなら、もちろん顧客も喜んでくれるだろう。
(当然「iPad対応」という項目を見積もりに入れられるので、同僚の営業も喜ぶだろう。)

2つの選択肢のうち、今後は積極的に後者を採用していきたい。