0

サブビューを UIScrollView に追加するたびに、4 つではなく 6 つの制約を追加する必要があります。

問題を再現する方法:

  1. 新しいシングル ビュー アプリケーションを作成します。
  2. ストーリーボードで、画面全体を埋める UIScrollView を追加します。
  3. 不足している制約を追加します (これにより、"Top Space to: Superview" などの 4 つの制約がスーパービューに追加されます)。
  4. UIScrollView のサブビューとして新しい UIView を追加します。小さな長方形になるようにサイズを調整します。
  5. このボックスに不足している制約を追加することを選択します。

6 つの制約が追加されていることがわかります。

  • スーパービューへのトレーリング/リーディング/トップ/ボトムの場合は 4
  • 幅は 1
  • 高さの場合は 1

幅または高さの制約を削除しようとすると、すべての制約がオレンジ色になります。ビューは、後続および先行の制約によって幅を決定できる必要があります。同様に、ビューは上部と下部の制約によって高さを決定できる必要があります。

では、なぜこれらの 6 つすべてが必要なのですか?

注: UIScrollView の代わりに UIView でこれと同じことを試すと、すべてが期待どおりに機能します。

4

1 に答える 1

0

これは、UIScrollView には、制約によっても決定する必要があるコンテンツ サイズがあるためです。最後の 2 つの制約を含めない場合、コンテンツ サイズはその大きさを認識できません。

実際には、UIScrollView には 8 つの制約が必要です。

単一のボタンを含む単一のスクロール ビュー (または固有のサイズを持つその他のビュー) があるとします。

次の制約が必要です。

  • スクロール ビューのフレームを配置するための 4。
  • スクロールビューのコンテンツサイズを決定するための4。

最初の 4 つの例は次のとおりです。

H:|[scrollView]|
V:|[scrollView]|

(これは単にスクロール ビューのフレームを設定して、画面全体を占めるようにします。)

最後の 4 つの例は次のとおりです。

H:|-10-[button]-10-|
V:|-10-[button]-10-|

(これらの行のそれぞれがちょうど 2 つの制約を作成することに注意してください。)

ボタンの固有サイズが 50 であると仮定します。これらの制約により、スクロール ビューのコンテンツ サイズを 70x70 に設定するだけです。

詳細については、こちらをご覧ください

Apple は、iOS 6 の iOS SDK リリース ノートで、スクロール ビューと自動レイアウトの動作に関する情報もリリースしました。そこでは、「Pure Auto Layout アプローチ」と「Mixed アプローチ」で動作させる方法が説明されています。

于 2013-10-30T17:17:25.053 に答える