web-dev-qa-db-ja.com

UIScrollView-x位置/幅には制約が必要、y位置/高さには制約が必要

次のようなビュー階層があります(他の回答と、UIScrollViewを操作するためのAppleの高度なAutoLayoutガイドに基づいています)。

enter image description here

ScrollViewに必要な2ステップは次のとおりです。

  1. ScrollViewのpositionおよびsize(frame)の制約を設定します。他のビューで行うのと同じ方法です。
  2. コンテンツサイズの制約を設定します。プログラムではなく、インターフェイスビルダーでこれを行います。

ステップ1最初は問題なく動作し、これが結果でした:

enter image description here

enter image description here

positionsizeには問題ありません。コンテンツサイズ(コンテンツの高さとコンテンツの幅)をInterface BuilderでStep 2と定義するだけです。

次に、ScrollViewの4つのエッジすべてに触れる制約を次のように追加します。

enter image description here

突然、ScrollViewはpositionsize(frame)であることを認識しなくなります。

enter image description here

他の回答を見て、さまざまな手順を実行しましたが、この問題を解決できないようです。プライバシーの問題により、ストーリーボードのスクリーンショットを投稿できません。

15
Fourth

スクロールビューは、最初は少し難しいかもしれません。あなたは本当に3つの部分があります:

  1. スクロールビューの実際のフレーム
  2. スクロールビューに含まれるサブビューの実際のフレーム
  3. スクロールビューのcontentSize-つまり、どちらの方向にスクロールするか

したがって、1。は非常に単純明快です。

2番目の部分も、サブビューをスーパービューの内側の端に「固定」する傾向があることを除いて、単純明快です。スクロールビューのサブビューの場合、those制約がcontentSizeを定義します。 またはサブビューに「サイズ」があることを確認する必要があります。

1つのサブビューから始めて、次のようにします。

  1. スクロールビューの制約を「通常」に設定します。
  2. サブビューのサイズを設定します-デモ目的でのみ、100 x 100に設定します
  3. サブビューの4つのエッジすべてをスクロールビューの4つのエッジに固定する

アプリを実行します。見ているものがわかるように背景色を設定すると想定すると、スクロールビューが期待どおりに配置およびサイズ設定されているはずです...スクロールビューのどこかに座っている100 x 100のサブビューが表示されます...そして、実際のスクロールを行うことができなくなる可能性があります。

戻ってサブビューを、たとえば100 x 800に変更しても、下部の制約がスクロールビュー(サブビューのスーパービュー)の下部に固定されている場合、アプリを再度実行します...あなたサブビューの高さ800 pt全体を上下にスクロールできます。

それについて考える方法は次のとおりです。スクロールビューのコンテンツ-1つまたは多数のサブビューであるかどうかにかかわらず、スクロール可能領域(スクロールビューのcontentSize)を定義するownサイズを定義する必要があります。

それが理にかなっていると思います!

10
DonMag
  1. スクロールビューの上部、下部、先頭、末尾の制約をスーパービューに0に設定します。

  2. スクロールビュー内にあるビューを設定し、その上部、下部、先頭、末尾の制約をスーパービューに0に設定します。

  3. スクロールビュー内にあるビューを選択し、サイズインスペクターに移動して、[固有のサイズ]を[プレースホルダー]に設定します。

13
hkdalex