質問: Objective-CのstoryboardでScrollViewの子としてImageViewを設定し、autolayoutをImageViewに設定しようとしたのですがいくらやってもきちんと適用されず、ImageViewがおかしな形になってしまいます(上下左右の空間を設定したい)。この場合どのようにしたら良いでしょうか。
回答: 「Objective-Cのstoryboardで」ということは、Auto Layoutの設定を、プログラム(NSLayoutConstraint)で行いたいということでしょうか?それともStoryboard上で、マウス操作で行いたいのでしょうか? ともかくここではAuto Layoutの概要に触れるだけに留めておきたいと思います。 Auto Layoutの基本の考え方は、オブジェクトの位置と大きさが、一意で決定する制約(Constraint)を行うということです。よぶんな制約がないに越したことはありませんが、ポイントは何通りも可能性があるような制約では、エラーになるという点です。 実務的にもっとも頻繁に使われる制約は、下図です。 !画像の説明をここに入力 近接するオブジェクトの横方向(X座標)と縦方向(Y座標)の間隔を決定し、オブジェクトの幅(Width)と高さ(Height)を決定すれば、オブジェクトの位置と大きさが、一意で決まります。 しかし、スクロールビュー内のオブジェクトについてみると、それではオブジェクトの位置は、一意では決まりません。スクロールビュー内の、**コンテントサイズが、そのままでは不定**だからです。プログラムで、Auto Layoutを使用せずに、スクロールビュー内にオブジェクトを配置するならば、まず`UIScrollView`のプロパティ`contentSize`に、`CGSize`の値を代入してから、`Subview`を配置するという手順になります。 Auto Layoutで、スクロールビュー内のオブジェクトの配置を行う場合は、オブジェクトの位置とサイズだけでなく、コンテントサイズの決定まで行わなければ、一意に決まりません。具体的には、下図のような制約を行います。 !画像の説明をここに入力 先の図より、制約が2箇所追加になっています。スクロールビュー内のコンテント領域の四囲のエッジすべてに対する制約、プラスオブジェクトの幅と高さ、合わせて6箇所の制約を設定して、はじめて一意の位置と大きさが決定します。同時にコンテント領域のサイズも決定されています。