mzgkworks

iOSを中心にプログラミング関係について書く

【AutoLayout】画面サイズに対する比率でViewを定義する

例えば電卓のボタン。
横に3つのボタンを均等に配置する場合。
ボタンの高さは画面(ステータスバーを除く)の縦8分の1。

環境

1. BaseView

まず、レイアウトのベースとなるUIView(以降BaseView)を追加する。
これは、大元のViewを使うとステータスバーの領域がレイアウトに含まれるため。
BaseViewは、ステータスバーの直下(TopLayoutGuide:0)から画面一杯で制約を設定。
以降、このBaseViewをレイアウトのベースとする。

2. ボタン

ボタンを横に並べて3つ作成。
それぞれのレイアウト設定はしない。
ボタン3つをCmdを押しながら選択して、エディター右下のAuto Layout設定メニューでStackを押下。
StackViewでまとまる(自動で横並びになる。縦に並べた場合は縦並びになる)。
ボタンの幅を均等にするには、StackView -> Distribution -> Fill Equality

3. StackView

StackViewに対して制約を設定する。

  • 左右 : BaseView:0
  • 下 : BaseView:0
  • 高さ : BaseViewとStackViewを選択 -> Pin -> Equal Height
  • StackViewを選択し、Equal HeightのMultiplierを1->1:8(BaseViewの高さの8分の1)

これで、画面サイズに応じてボタンのレイアウトが崩れずに調整されて表示される。