6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ケースからAutoLayoutを学ぶ

Last updated at Posted at 2016-07-18

はじめに

よくわかるAuto Layout iOSレスポンシブデザインをマスターを参考に、AutoLayoutで学んだことを記事にしていきたいと思います。今回はケースからAutolayoutを学んでいきたいと思います。

ケース1 同一幅のオブジェクトを並べるケース

以下のように、Buttonを3つ均一に並べる

Simulator Screen Shot 2016.07.18 15.36.36.png

大まかな手順

1. ContainerViewの配置
2. Buttonを3つ配置
3. 制約を追加

Buttonをグループ化するために親となるContainerView(UIView)を作成し、入れ子にする。

スクリーンショット 2016-07-18 15.37.39.png

制約について

水平方向

ContainerView

1. ContainerView.leading = leading
2. trailing = ContainerView.trailing

Button

3. Button1.leading = leading + 5
4. Button2.leading = Button1.trailing + 5
5. trailing = Button3.trailing + 5
6. Button3.leading = Button2.trailing + 5
7. Button2.width = Button1.width
8. Button3.width = Button1.width

ContainerViewは画面幅に固定してあり(1, 2)幅は決定しているので3つのボタンの幅を等しくし(7, 8)、水平方向の制約をつけることで(3~6)、Buttonの幅が決定する

垂直方向

ContainerView

1. ContainerView.centerY = centerY

Button

2. Button1.top = top
3. bottom = Button1.bottom
4. Button2.centerY = centerY
5. Button3.centerY = centerY

垂直方向の制約はこれだけで良い。なぜならButtonの高さ(幅)はテキストとFontによって決定されるからである。よって2, 3の制約によって自然と親のContainerViewの高さも決定する。1. によって垂直方向の制約は画面の中央に設定されているのでここで垂直方向の制約が決定する。ContainerViewの高さが決定しているので(4, 5)によってButton2, Button3の高さも決定する。
これが見落としがちで高さの制約を余分に追加してしまうケースが多い。余分な制約はバグの温床となる。意図的にButtonの高さを決定したい場合はContainerViewの高さを決定すれば変更できる。

制約の全体像

スクリーンショット 2016-07-18 15.51.35.png

ケース2 等間隔で並ぶオブジェクト

以下のように、Buttonを3つ均一に並べ、等間隔に配置する

Simulator Screen Shot 2016.07.18 16.10.28.png

大まかな手順

1. ContainerViewの配置
2. Buttonを3つ配置
3. 間隔のために用いるViewの配置
4. 制約を追加

一つ目と手順は大まか同じだが、今回は等間隔に配置するためのViewを用意する。(Space1, Space2)

スクリーンショット 2016-07-18 16.12.35.png

制約について

水平方向

ContainerView

1. ContainerView.leading = leading
2. trailing = ContainerView.trailing

Button

3. Button1.leading = leading + 5
4. Space1.leading = Button1.trailing
5. Button2.leading = Space1.trailing
6. Space2.leading = Button2.trailing
7. Button3.leading = Space2.trailing
8. trailing = Button3.trailing + 5
9. Space2.width = Space1.width
10. Button2.width = Button1.width
11. Button3.width = Button1.width

ケース1とほとんど同じだが今回は、4~7の制約によってButtonの間の幅はSpace1Space2の幅にしている。これに加えて9の制約でSpace1Space2を同じ幅にすることによって等間隔な幅が計算されて水平方向の幅が決定する。

垂直方向

ContainerView

1. ContainerView.centerY = centerY

Button

2. Button1.top = top
3. bottom = Button1.bottom
4. Button2.centerY = centerY
5. Button3.centerY = centerY
6. Space1.centerY = Button1.centerY
7. Space2.centerY = Button1.centerY
8. Space1.height = 1
9. Space2.height = 1

垂直方向の制約はケース1とほとんど同じである。異なる部分は7~9によってSpaceの垂直方向の制約を決定しているところである。
Space1Space2は間隔を決定するためだけのViewなので色は透明色を設定する。しかし、透明色を設定する場合は、透過処理が入り描画パフォーマンスは落ちるため、背景色が決まってる場合は背景色を設定したほうが良い。

制約の全体像

スクリーンショット 2016-07-18 16.23.53.png

6
6
2

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
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?