2017-04-24 18 views
0

自動レイアウト制約を使用しているUIScrollViewに問題があります。 Iは、応答を受信するために応じて増加しているコンテンツの内側から見た図、A又はBビューは、次のビュー階層スクロールビューの高さを動的に調整する方法

-view 
    -scrollView 
    -view A 
    -view B 

を有します。ですから、内容に応じてスクロールビューの高さを設定する方法を教えてください。

+0

のtableViewが最良の選択肢ではなく、その後scrollviewです。 –

+0

scrollView _height_についてどうぞよろしいですか?たぶんあなたは 'contentSize'を更新する必要がありますか? –

+0

画面の上、下、左と右、中央の位置合わせに自動レイアウト制約を設定します –

答えて

0

あなたが自動レイアウトで作業している場合は、上の制約を設定する必要があります。これはあなたがscrollviewのコンテンツのサイズに採用行うことができます

- viewA.top = scrollView.top 
- viewA.height = 100 (or make the view autosizing the same way as scrollview) 
- viewB.top = viewA.bottom 
- viewB.height = 100 (or make the view autosizing the same way as scrollview) 
- viewB.bottom = scrollView.bottom 

。 親ビューでスクロールビューの制約を設定する必要があります。

- scrollView.top = view.top + 100 (just an example) 

あなたのために最も重要なのはscrollviewの上部と最後の1 scrollviewの底部に接続する必要がありますを最制約を持っている必要がありscrollviewプラス最初の1のすべてのサブビュー間の制約があります。あなたはViewA & ViewB高さの制約を設定する必要がありIBでscrollViewでの作業UITableViewCell

0

自動サイズ調整例えば -

そのルールは、あなたが「自動サイズ」の高さを持つようにしたいという、すべてのビューに適用されます。 scrollViewを設定しないと、彼の身長を設定できません。

スクロールビューの余白の制限を設定して、スーパービューにする必要があります。自動レイアウトガイドについてのApple Developerから

0

は、部品名は「スクロールでの作業ビュー」がある最も一般的なレイアウト作業のために、あなたの問題

のための明確なソリューションを持っているあなたが使用している場合、ロジックがはるかに容易になります スクロールビューのコンテンツを含むダミービューまたはレイアウトグループ。 Interface Builderで作業している場合、一般的なアプローチは、以下の 示されています:

  1. がシーンにスクロールビューを追加します。
  2. スクロールビューのサイズと位置を定義するための制約を描画します。
  3. スクロールにビューを追加します。 ビュー。ビューのXcode固有のラベルをコンテンツビューに設定します。
  4. スクロール ビューの対応するエッジに、コンテンツビューの上部、下部、先頭、および後端を固定します。コンテンツビューでは、スクロール ビューのコンテンツ領域が定義されるようになりました。
  5. (オプション)水平スクロールを無効にするには、コンテンツビューの幅をスクロールビューの幅と同じに設定します。コンテンツビューは、スクロールビューを水平方向に塗りつぶします。
  6. (オプション)垂直スクロールを無効にするには、コンテンツビューの高さをスクロールビューの高さと同じに設定します。コンテンツビューは、スクロールビューを水平方向に塗りつぶします。
  7. スクロールビューのコンテンツをコンテンツビュー内にレイアウトします。制約を使用して、コンテンツビュー内のコンテンツを通常の位置に配置します。

コードで自動レイアウトを行うもう一つの重要な事は、このコードによって制約するマスクのサイズを変更し、自動から 無効に翻訳することです:

scrollView.translatesAutoresizingMaskIntoConstraints = false; 
viewA.translatesAutoresizingMaskIntoConstraints = false; 
viewB.translatesAutoresizingMaskIntoConstraints = false; 

だからあなたのビュー階層は次のとおりです。

-view 
    -scrollView 
    -scrollContentView 
     -view A 
     -view B 

scrollViewの制約は、通常のビューと似ています。たとえば、scrollViewには親ビュー内のすべてのスペース

[scrollView.leadingAnchor constraintEqualToAnchor:view.leadingAnchor]; 
[scrollView.trailingAnchor constraintEqualToAnchor:view.trailingAnchor]; 
[scrollView.topAnchor constraintEqualToAnchor:view.topAnchor]; 
[scrollView.bottomAnchor constraintEqualToAnchor:view.bottomAnchor]; 

そしてscrollContentView

[scrollContentView.leadingAnchor constraintEqualToAnchor: scrollView.leadingAnchor]; 
[scrollContentView.trailingAnchor constraintEqualToAnchor: scrollView.trailingAnchor]; 
[scrollContentView.topAnchor constraintEqualToAnchor: scrollView.topAnchor]; 
[scrollContentView.bottomAnchor constraintEqualToAnchor: scrollView.bottomAnchor]; 

に類似そして最後にviewAとviewBの制約で、viewBのトップ

[viewA.leadingAnchor constraintEqualToAnchor: scrollContentView.leadingAnchor]; 
[viewA.trailingAnchor constraintEqualToAnchor: scrollContentView.trailingAnchor]; 
[viewA.topAnchor constraintEqualToAnchor: scrollContentView.topAnchor]; 
[viewA.bottomAnchor constraintEqualToAnchor: viewB.topAnchor]; 

[viewB.leadingAnchor constraintEqualToAnchor: scrollContentView.leadingAnchor]; 
[viewB.trailingAnchor constraintEqualToAnchor: scrollContentView.trailingAnchor]; 
[viewB.topAnchor constraintEqualToAnchor: viewA.bottomAnchor]; 
[viewB.bottomAnchor constraintEqualToAnchor: scrollContentView.topAnchor]; 
にviewAの下のピンを設定
関連する問題