14

ストーリーボードを使用するxcode 5では、AutoLayoutをオンにして、完全に機能する垂直スクロールスクロールビューを作成するにはどうすればよいですか?
サブビューに階層があることを考慮すると、次のようになります。

  1.UIView  
    2.UIScrollView
      3.UIView (lets call this UIDetailView to make things easier)

ビューのいずれかを小さくする必要があるかどうかなど、コードから制約まで具体的にしてください。

4

5 に答える 5

12

ストーリーボード内の Autolayout を使用した UIScrollView は正常に機能します

私は、理解できない問題を解決するために、「コンテナ ビュー」アプローチ、別名ブルート フォースを推奨する人を数多く見てきました。コンテンツがスクロールビューに直接接続されているサブビューではなく、スクロールビュー全体であると見なすことにより、スクロールビューの大きな利点を失ったため、最適ではありません。

これが、次の例で行った方法です

--UIScrollView
  |-> UITextView
  |-> UILabel
  |-> UIOtherStuff

をストーリーボードの に配置するときUIScrollViewUIView、エッジを の 4 つの側面に固定するだけUIScrollViewですUIView。にコンテンツを追加してUIScrollView、各ディメンションに少なくとも 2 つの制約を指定するようにします。Autolayout の優れた点は、スクロールビューの contentSize または UILabels のサイズを、その中のコンテンツのサイズに基づいて決定する必要があることです。AKA 固有コンテンツサイズ。したがって、「scrollView のあいまいなコンテンツ サイズ」という警告が表示された場合は、コンテンツに十分な制約を与えていないことがわかります。たとえば、ビュー間に上、下、左、右の間隔距離を指定した可能性がありますが、このような無限の垂直面であるため、制約しているサブビューにも高さが必要ですUIScrollViewあなたの見解がゼロから無限に高いと仮定することができます.

別の言い方をすれば、Autolayout by Example に関する Apple ガイドでは、成功のための簡単な 3 つのポイント計画を立てています。

  1. スクロール ビューを作成します。
  2. その中に UI 要素を配置します。
  3. スクロール ビュー コンテンツの幅と高さを完全に定義する制約を作成します。

'Min melding til' を持つその上部の TextView も、さらに多くの行を入力すると成長し、ScrollView 全体がそれを含むように成長します。クラスをオーバーライドしUITextViewて変更された高さの制約を返しますが、ScrollView 自体はコーディングしなくても正しく動作します。

最後に、Autolayout に関連する多くの投稿で、すべてを修正するという魔法の呪文を試していますtranslatesAutoresizingMaskIntoConstraints = NO。これは、ビューがプログラムで作成された場合にのみ必要です。

Autolayout を使用した UIScrollView の例

于 2014-01-20T13:49:22.053 に答える
6

ドキュメントには、これを行う方法が明確に記載されています。自動レイアウトの UIScrollView は、コンテンツ (UIDetailView) に合わせて常にサイズ変更されます。

したがって、次のようにビューを設定する必要があります。

  • UIView: 制約のある位置。
  • UIScrollView: 制約付きで UIView にバインドします。
  • UIDetailView: サイズ (本質的なコンテンツ サイズ) を設定し、圧縮耐性を最大化し、上部、下部、先頭、および末尾の制約を UIScrollView に手動で 0 に設定します。
于 2013-10-01T09:22:02.210 に答える
2

同様の問題があり、コードなしで純粋な Autolayout を使用して、Interface Builder 内から DJ S に似た比較的単純なソリューションを見つけました。

概念実証のために、最初にView Controllerの制約をすべて削除して、これが機能するかどうかを確認します。

これはサンプル レイアウトです。

  • ビュー (私の UIViewController のメイン ビュー)

    • スクロール ビュー (UIScrollView)

      • コンテナ ビュー (UIView)

        • コンテンツ ビュー (例: UIImageView)

A. スクロール ビューの幅/高さは、コンテナー ビューの幅/高さより小さくする必要があります。

B. コンテナー ビューには、幅/高さが決められている必要があります (明示的な幅/高さの場合があります)。

C. Control キーを押しながら Container View を Scroll View にドラッグし、以下のみを追加します。

  1. スペースをコンテナに導く
  2. コンテナへの後続スペース

D. これらの 2 つの制約を確認し、両方の「定数」値を 0 に設定します

E. アプリを実行し、

于 2013-12-08T20:44:36.077 に答える