ストーリーボードを使用するxcode5では、AutoLayoutをオンにして、完全に機能する垂直スクロールスクロールビューをどのように作成しますか?
サブビューに階層があることを考えると:
1.UIView
2.UIScrollView
3.UIView (lets call this UIDetailView to make things easier)
コードから制約まで、ビューのいずれかを小さくする必要があるかどうかなどを具体的に指定してください。
このブログ投稿では、純粋な自動レイアウトアプローチを使用して、自動レイアウトをオンにしてUIScrollViewを使用する方法について詳しく説明しています。ただし、ブログ投稿のすべての制約はストーリーボードを介して定義されていることに注意してください。
投稿のアプローチは、次の階層を前提としています。
1. View (main view of my UIViewController)
2. Scroll View (UIScrollView)
3. Container View (UIView)
4. Content View (e.g. UIImageView)
コンテナビューはUIDetailViewになり、コンテンツビューはUIDetailView内の任意のUIViewになると思います。
https://happyteamlabs.com/blog/ios-how-to-use-uiscrollview-with-auto-layout-pure-auto-layout/
理解できない問題を解決するために、「コンテナビュー」アプローチ、別名ブルートフォースを推奨する多くの人々を見てきました。コンテンツがスクロールビューにすぐにアタッチされたサブビューではなく、スクロールビュー全体であると見なすようにすることで、スクロールビューの大きな利点を失ったため、これは最適ではありません。
これが次の例で私がそれをした方法です
--UIScrollView
|-> UITextView
|-> UILabel
|-> UIOtherStuff
ストーリーボードのUIScrollView
にUIView
を配置するときは、UIScrollView
の4つの側面の端をUIView
に固定するだけです。次に、コンテンツをUIScrollView
に追加し、各ディメンションに少なくとも2つの制約を指定するようにします。 Autolayoutの優れている点は、スクロールビューのcontentSize、またはUILabelsが、その中のコンテンツのサイズに基づいてどれだけ大きくなる必要があるかを把握できることです。別名intrinsicContentSize。したがって、「scrollViewのコンテンツサイズがあいまいです」という警告が表示された場合は、コンテンツに十分な制約が与えられていないことがわかります。たとえば、ビュー間に上、下、左、右の間隔の距離を指定した場合、このUIScrollView
のような無限の垂直面はビューがゼロから無限に高い。
別の言い方をすれば、 例による自動レイアウトに関するAppleガイド は成功のための簡単な3ポイントの計画を立てます:
'Min melding til'のある一番上のTextViewも、さらに行を入力すると、ScrollView全体がそれを含むように成長します。 UITextView
クラスをオーバーライドして、変更された高さ制約を返しますが、ScrollView自体はコーディングなしで正しく機能します。
最後に、自動レイアウトに関連する多くの投稿が魔法の修正を試みます-すべての呪文translatesAutoresizingMaskIntoConstraints = NO
。これは、ビューがプログラムで作成されている場合にのみ必要です。
ドキュメントには、これを行う方法が明確に記載されています。自動レイアウトのUIScrollViewは、コンテンツに合わせて常にサイズを変更します(UIDetailView)。
したがって、次のようにビューを設定する必要があります。
私も同様の問題を抱えていましたが、コードなしで純粋なAutolayoutを使用して、InterfaceBuilder内からDJSに似た比較的単純なソリューションを見つけました。
概念実証のために、最初にView Controllerの制約を削除して、これが機能するかどうかを確認します。
これはサンプルレイアウトです:
ビュー(私のUIViewControllerのメインビュー)
スクロールビュー(UIScrollView)
コンテナビュー(UIView)
A.スクロールビューの幅/高さは、コンテナビューの幅/高さよりも小さくする必要があります
B.コンテナビューには、一定の幅/高さが必要です(明示的な幅/高さの場合もあります)
C. Controlキーを押しながらコンテナビューをスクロールビューにドラッグし、以下のみを追加します。
D.これら2つの制約を確認し、両方の「定数」値を0に設定します。
E.アプリを実行して
新しいiPhone6および6+の画面サイズのため、私はいくつかの調整を行う必要がありました DJ Sのソリューション 。
ゴール
UITextView
をUIScrollView
内に配置し、画面の左右の端から15
ptのスペースを確保します。
ビュー
1. Main View (main view of my UIViewController)
2. Scroll View (UIScrollView)
3. Container View (UIView)
4. Text View (UITextView)
ソリューション
スペースについては、UIScrollView
-> Main View
から15ポイントの水平方向の末尾/先頭のスペースを追加しました。画面の幅に対してUITextView
の幅を作成するために、UITextView
-> Equal Widths
からMain View
制約を追加し、値を-30
( 2 * 15ポイントの水平スペース)。これで、UITextView
の幅は任意の画面サイズに合わせて動的に調整されます。
UIScrollView
にはScrolling Enabled
が必要です。 UITextView
はnotではありません。