2016-03-20 11 views
2

私はスクロールビューの中に1行と10行のように少ないラベルがあります。スクロールビューのコンテンツサイズをダイナミックにして、それに応じてストレッチする方法を考え出すのが難しいです。動的高さのサブビューでscrollviewを使用するにはどうすればよいですか?

> = 100(任意の数値)の高さ制約を追加しようとしましたが、Inequality Constraint Ambiguityという不満がありました。

img

答えて

2

クイック答え

  1. あなたのラベルに現在の高さの制約を削除します。
  2. ラベルLinesのプロパティが0に、Line BreaksWord Wrapに設定されていることを確認します。
  3. ラベルの上下のビューに垂直スペーシング制約を追加します。
  4. スクロールビューが高さを推測するために、すべてのビューに上から下の余白までの垂直スペーシングの制約があることを確認してください。contentView

説明

そのコンテンツのサイズを推測するために、スクロールビューのためには、マージンからサブビューへのマージンに制約を持っている必要があります - コンテンツは、その内部の空気が上プッシュしている風船のようにそれを想像しますバルーンサイズにするための壁です。サブビューからマージンまでの制約により、サブビューのサイズはコンテンツビューの壁を押し出すことができます。

Linesのラベルを設定する場合、0には、必要なだけさまざまな行があることを意味します。 Line BreaksプロパティがWord Wrapに設定されている場合、単語が切り捨てられない(切り捨てられない)か、文字に分解され、代わりに単語全体として次の行にプッシュされます。

0

あなたはそれが全体のテキストが収まる高さになりますUILabelのための高さ制約を指定しない場合。行数が0に設定され、ラベルにすべてのマージン制約が設定されていることを確認してください。

0

アップルからのこのテクニカルノートでは、自動レイアウトのみを使用してスクロール可能なコンテンツでスクロールビューを正しく設定する方法について説明していますhttps://developer.apple.com/library/ios/technotes/tn2154/_index.html

概念的には、あなたのケースでは、これはあなたが何をする必要があるかです:

ビュー階層:

MainView -> ScrollView -> ContentView -> UILabel

  1. Scrollviewは
  2. 、メインビューのすべてのエッジに拘束されますContentViewはScrollView
  3. のすべてのエッジに制約され、UILabelはContentViewのすべてのエッジに制約されますらUILabel行数を0にし、あなたが現在適用されている高さの制約を取り除く)

ここで重要なのは、UILabelの高さはそれほど伸びてcontentViewの大きさだけでUILabelの大きさに依存することを実現することですcontentViewを行います。これにより、scrollViewは自動的にcontentSizeを推測し、必要に応じてスクロールを有効にします。

関連する問題