短い答え:
のSc rollView制約
Leading >= 0, Trailing >= 0, Top >= 0, Bottom >= 0
Center X and Center Y
StackView制約
Leading = 0, Trailing = 0, Top = 0, Bottom = 0
StackView width = ScrollView width (priority low :250)
StackView height = ScrollView height
長い答えは
まず、あなたの構造は良いですが、我々は持っている:
UIScrollView
UIStackView (horizontal)
Subviews
をので、目標を達成するために、我々は:
ここ
それを行う方法であるの本質的な内容 サイズにUIScrollView
同等のcontentSizeを設定UIScrollView
: ステップ1:センターUIScrollViewのフレーム
CenterY
とCenterX
UIScrollView
Leading Space
> = 0、Trailling Space
> = 0のフレームをセンタリングするために使用される制約、Top Space
> = 0、Bottom Spac
E> = 0はUIScrollViewのフレームを防止するために使用されます
UIScrollView
のcontentSizeに関連するエラーを表示しないために、プレースホルダ固有のサイズを使用しました(contentSizeのサブビューがないため)。
今、私たちのUIScrollView
のフレームがOKで、次のステップ:)
ステップ2に進みます:水平UIStackView
- トップ、ボトムを追加し、リードします後続の制約を使用して固定する。 UIStackViewフレーム
- 等価高さと等幅を計算に使用するe content UIScrollViewのサイズ
PS。 UIStackViewのフレーム内のすべての変更は、UIScrollViewのをcontentSize
ステップ3を変更:我々は固有のコンテンツサイズ(高さと幅を持たなければならないUIStackView
すべてsubviews
でFill Distribution
を使用しているためサブビューに
を追加します制約(望ましくない))。 たとえば、Fill Equally
を使用する場合、内在コンテンツサイズ(または高さと幅の制約(推奨しません))を持つsubview
の1つのみで十分です。他のサブビューのサイズはこれと同じになります。例については
:私はそれが動作する3つのラベル(UIScrollView
のプレースホルダ本来のサイズを削除してください)
が追加されます!いいえ、いいえ、まだ4番目と5つのラベルを追加しようとしていません:)
なぜですか?
親ビューのサイズ:200、200 最初のラベル固有コンテンツサイズ:我々は、2つの例とビューの各要素のフレーム計算し理解する
120を、50 第二の標識真性コンテンツサイズ:150、50
第1の例(UIStackView
でのみ最初のラベル)
UIStackView
固有コンテンツサイズ= 120、50
UIScrollView
contentSize = 120、50
UIScrollView
フレーム= 40、75、120、50
すべてのフレームが
第二の例(OKであります2つのラベル付き)
UIScrollView
= 0、0、200、50
UIScrollView
contentSize = 200、50
UIStackView
固有コンテンツサイズ= 200、50だから
フレーム、UIStackView
が正しく2つのラベルを表示することができない(なぜならUIStackView
の幅が2つのラベルの幅よりも小さい)、スクロールしないため、UIStackView
という制約の幅がUIScrollViewの幅と等しいためです。 UIStackView
本来のコンテンツサイズが最大UIScrollView
フレームよりも小さい場合に機能します。それを解決するには
は、我々はUIStackView
固有のコンテンツサイズ優先値よりも低い値に幅の制約の優先順位を変更し、すべてが正常に動作します:)
お役に立てば幸いです。
Code source
SwiftまたはObjective Cで作業していますか? –
Swift 2.0を扱っているIm – r3dsm0k3
stackViewの中の3でsubViewの量を上限にしますか? – Adrian