69671


以下の記事を参考にして、UIScrollView内に、UIViewを配置してその中にコンテンツ(UILabel)を配置しました。

[【UIScrollView】Autolayoutで縦スクロール【Xcode8.x】 - Qiita](https://qiita.com/fromage-
blanc/items/d480f2a45f0f60474531)

しかし、以下のgif動画のように、右側のスクロールバーは動いているのに、中央に配置したLabel等が動かないという状態になってしまいます。

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

１度だけなにかの拍子でうまく動かせたのですが、その後２時間くらい再現しようと色々試してもうまく行かなかったので質問させてください。

### 試した手順

①ViewControllerをfreedomに変更し、heightを2800へ  
[![画像の説明をここに入力](https://i.stack.imgur.com/xGV30.png)](https://i.stack.imgur.com/xGV30.png)

②デフォルトで生成されているUIView内にUIScrollViewを配置  
[![画像の説明をここに入力](https://i.stack.imgur.com/VYmJr.png)](https://i.stack.imgur.com/VYmJr.png)

③UIScrollViewに４つの制約を追加  
[![画像の説明をここに入力](https://i.stack.imgur.com/aKVi6.png)](https://i.stack.imgur.com/aKVi6.png)

④UIScrollViewの中にUIView(ContentView)を追加  
[![画像の説明をここに入力](https://i.stack.imgur.com/cXEQE.png)](https://i.stack.imgur.com/cXEQE.png)

⑤UIView(ContentView)に５つの制約を追加  
[![画像の説明をここに入力](https://i.stack.imgur.com/LMHeO.png)](https://i.stack.imgur.com/LMHeO.png)

⑥UIView(ContentView)の中にUILabelを追加  
[![画像の説明をここに入力](https://i.stack.imgur.com/4nbti.png)](https://i.stack.imgur.com/4nbti.png)  
[![画像の説明をここに入力](https://i.stack.imgur.com/C8rpa.png)](https://i.stack.imgur.com/C8rpa.png)

何が原因だと考えられますでしょうか？

追記：私のXCode上でのConstraintは以下の画像のようになっていました。  
[![画像の説明をここに入力](https://i.stack.imgur.com/AueKy.png)](https://i.stack.imgur.com/AueKy.png)


CC BY-SA 4.0
2020-08-18T08:46:05.800
69653
2020-08-19T01:10:33.343
2020-08-19T01:10:33.343
36446
36446
question
swift xcode
Storyboardで作成したUIScrollViewが、スクロールバーは動くのにスクロールできない


まずは、参考にされている記事が古すぎます。iOSやSwift言語とともに、Xcodeの使い方もバージョン毎に変わっていっています。記事内には存在しない「Content
Layout Guide」や「Frame Layout Guide」が、あなたのstoryboardには存在していることがわかるかと思います。

# Xcode 11を使っているなら、Xcode 11用の記事を見つけて下さい。

現在ご質問中に含まれる情報だけではどのような制約をつけられたのかがわからないのですが、⑤の画像を見る限りContentViewに付けられた制約が間違っている可能性が高いです。

なお、storyboardの設定状態を画像で説明しようとする場合、Constraintsを展開した状態のものを示していただくと、より詳しい情報が伝わります。

[![スクロールが成功するときの制約の状態](https://i.stack.imgur.com/OfgYx.png)](https://i.stack.imgur.com/OfgYx.png)

あなたの現在の制約では、ContentViewのleading, trailing, top, bottomがFrame Layout
Guideなんかに向けられていないでしょうか?

Frame Layout
Guideは`UIScrollView`そのものの画面上での表示範囲を表しています。上下左右をそれに固定する、と言うことはContentViewに「画面上の表示範囲から動くな」と言う制約をつけていることになります。

### 一旦それらの制約は全て削除して、(上の画像にあるように)Content Layout Guideに対する制約をつけて下さい。

Xcode 11における`UIScrollView`での制約の付け方については、次の記事(英語ですが)がわかりやすくまとまっていました。

[How to use scroll view in Interface Builder / Storyboard (Xcode
11)](https://fluffy.es/scrollview-storyboard-xcode-11/)

(残念ながら、私の検索技能では、日本語のわかりやすい記事は見つかりませんでした…。)

* * *

`UIScrollView`を使った画面にうまく制約をつけて画面のレイアウトを行うのは、かなり難易度が高く、私はこれまでずっと`UIScrollView`を直接使うのは避けてきたので、あまりうまく説明できませんが、何かわかりにくい点があれば、例によってコメントなどして下さい。


CC BY-SA 4.0
2020-08-18T18:28:40.697
69671
2020-08-18T18:28:40.697
13972
69653
answer