LoginSignup
21
17

More than 5 years have passed since last update.

iOSでサイズクラスを使って特定のデバイスだけレイアウトを切り替える

Posted at

AutoLayoutを使ってレイアウト設計をちゃんとすればデバイスサイズが違おうが、横に向けようがまぁまぁマトモな見た目になってくれます。
けれどレイアウトによっては横向きにした場合にあまりにもレイアウトが崩れてしまう場合、Landscapeを非対応にするとかそんな消極的なやり方をチョイスせず、どの向きでもベストな使い勝手を提供すべきでしょ、となった場合の手順。

サイズクラスという考え方

サイズクラスというのはInterfaceBuilderにおけるこちらです。
screen1.png

初期状態では「wAny hAny」となっていますがこれは全てのサイズに対応するデフォルトとしてのレイアウトを意味します。
この状態でうまく制約を設定してやればデバイスサイズや向きに関わらず、少なくともコントロール間の位置関係は維持してくれます。
この「wAny hAny」をクリックするとでてくる吹き出し内の枠をドラッグしてやると「Compact Width」とか「Regular Height」と表示されます。これが各デバイスサイズや向きに対応したサイズクラスで実機との対応関係は以下のようになります。

デバイス/向き 横サイズクラス 縦サイズクラス
iPhone縦 Compact Regular
iPhone横 Compact Compact
iPhone6Plus横 Regular Compact
iPad縦 Regular Regular
iPad横 Regular Regular

6Plus以外のiPhoneはPortraitでは「CompactxRegular」なのにLandscapeでは「CompactxCompact」なので注意。
とりあえず実験用として「wAny hAny」でラベルを3つ配置してみます。

screen2.png

サンプルとして分かりやすいレイアウトにしてみました。
それぞれ位置を固定できるようにAutoLayoutは設定済みです。
通常、ラベルに幅と高さは指定する必要はありませんが、ここでは縦書きにするためにLINE数を3〜4にした上で幅、高さも固定しています。シミュレータで動かしてみて横に向けるとこんな感じです。

screen3.png

ここで、6Plusの場合のみ横を向いたら横書きになるようにしてみます。

特定デバイスのレイアウトだけ変更する

まずサイズクラスを横向きのiPhone6Plusに当たる「wRegular hCompact」に変更します。

screen4.png

ラベルの文字を横書きにしたいので幅/高さを固定している制約を解除します。
アウトラインから各ラベルに設定しているwidthかheightの制約を1つ選択します。
そしてサイズインスペクターの一番下にいる「installed」の左側にある「+」をクリックします。

screen5.png

表示されるポップアップに現在表示中のサイズクラスである「Regular width | Compact height」という行があるので選択します。
すると先ほどまで「installed」とあった行の下に「wR hC installed」という行が追加されました。
この新たに追加された行にチェックが入っていると思いますが、これを外します。
こうすることで「Regular width | Compact heightの時はこの制約は有効ではない」という指定がなされたことになります。
同様の設定を各ラベルのwidth/height制約に対して行っていきます。

次に一番上のラベルを左に寄せるためにtrailingを、一番下のラベルを右に寄せるためにleadingを変更します。
それぞれの制約を選択して「wR hC」のサイズクラスを追加してチェックを外します。
次に各ラベルを適切な位置に移動して一番上のラベルにはLeading制約、一番下のラベルにはTrailing制約を追加します。
アウトラインはこんな感じになります。

screen6.png

色が薄くなっている箇所は現在のサイズクラスでは無効になっている制約です。
これを6Plusで実行してみましょう。

Portrait時
screen7.png

Landscape時
screen8.png

課題

このサンプルプログラムですが、上下逆さまにすると横向き扱いです。
ソースコード(と言ってもStoryboardしか触ってませんが)はこちらに置いているので興味ある方は直してみてください。
ちなみに私は直し方が分かりません。。

21
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
17