

Objective-
CのstoryboardでScrollViewの子としてImageViewを設定し、autolayoutをImageViewに設定しようとしたのですがいくらやってもきちんと適用されず、ImageViewがおかしな形になってしまいます(上下左右の空間を設定したい)。この場合どのようにしたら良いでしょうか。


CC BY-SA 3.0
2015-05-21T14:19:54.813
10471
2015-08-20T20:37:55.420
2015-05-21T19:12:56.857
7362
9782
question
objective-c xcode scrollview uiimage
Objective-Cのautolayoutに関する質問


「Objective-Cのstoryboardで」ということは、Auto
Layoutの設定を、プログラム（NSLayoutConstraint）で行いたいということでしょうか？それともStoryboard上で、マウス操作で行いたいのでしょうか？

ともかくここではAuto Layoutの概要に触れるだけに留めておきたいと思います。

Auto
Layoutの基本の考え方は、オブジェクトの位置と大きさが、一意で決定する制約（Constraint）を行うということです。よぶんな制約がないに越したことはありませんが、ポイントは何通りも可能性があるような制約では、エラーになるという点です。  
実務的にもっとも頻繁に使われる制約は、下図です。

![画像の説明をここに入力](https://i.stack.imgur.com/8gfdp.png)

近接するオブジェクトの横方向（X座標）と縦方向（Y座標）の間隔を決定し、オブジェクトの幅（Width）と高さ（Height）を決定すれば、オブジェクトの位置と大きさが、一意で決まります。

しかし、スクロールビュー内のオブジェクトについてみると、それではオブジェクトの位置は、一意では決まりません。スクロールビュー内の、
**コンテントサイズが、そのままでは不定** だからです。プログラムで、Auto
Layoutを使用せずに、スクロールビュー内にオブジェクトを配置するならば、まず`UIScrollView`のプロパティ`contentSize`に、`CGSize`の値を代入してから、`Subview`を配置するという手順になります。  
Auto
Layoutで、スクロールビュー内のオブジェクトの配置を行う場合は、オブジェクトの位置とサイズだけでなく、コンテントサイズの決定まで行わなければ、一意に決まりません。具体的には、下図のような制約を行います。

![画像の説明をここに入力](https://i.stack.imgur.com/nEJic.png)

先の図より、制約が2箇所追加になっています。スクロールビュー内のコンテント領域の四囲のエッジすべてに対する制約、プラスオブジェクトの幅と高さ、合わせて6箇所の制約を設定して、はじめて一意の位置と大きさが決定します。同時にコンテント領域のサイズも決定されています。


CC BY-SA 3.0
2015-05-22T04:29:09.180
10489
2015-05-22T10:39:45.787
2015-05-22T10:39:45.787
7362
7362
10471
answer