Storyboard 上で UIScrollView を AutoLayout を使って設定する
環境: Xcode8.2.1, Swift3
Storyboard 上で UIScrollView を AutoLayout を使って設定する方法について。
ちょっとハマったのでメモ。
ビューの階層構造は
UIViewController.view -> UIScrollView -> UIView
とする。
UIScrollView の制約
UIScrollView の制約は以下のように上下左右に設定。
UIScrollView上に追加する UIView の制約
UIScrollView上に追加する UIView の制約は以下のように設定。
制約はすべて Superview である UIScrollView に対して設定を行う。
上下左右の制約に加え、width と height の制約も必要になる。
今回は UIScrollView の width , height と Equal な制約を追加する。
これにより UIScrollView のcontentSize
が決定する。
ちなみにControlを押しながらView
からUIScrollView
にドラッグ&ドロップすると簡単に制約追加できる。
こんな感じになる。
Adjust Scroll View insets の設定
UIViewController の Adjust Scroll View insets
のチェックは外しておく。
(コード上ならself.automaticallyAdjustsScrollViewInsets = false
となる)
UIViewController の Adjust Scroll View insets
は
UIViewController.view.subviews[0]
が対象になるとのこと。
今回のケースではUIScrollView
に対して自動調整が設定されるが、UIScrollView
の上側の制約はtopLayoutGuide
と Equal の設定をしており、ここからさらに更に余白(64pt)が追加されてしまうのでオフとしておく。
複数ビューを並べる例
ビューの階層構造は以下のような複数ビューを並べる場合。
UIViewController.view -> UIScrollView --> UIView1 └-> UIView2
こんな感じ。
UIScrollView の制約
先ほどの例と同じ。
RedView の制約
上下左右の制約とwidth、heightの制約を追加。
BlueView の制約
上下左右の制約とheightの制約を追加。
これでcontentSize
が決定したため制約エラーがなくなり、設定が完了した。