これが私の設定です。先頭に0に設定された試行のEdgeを持つUIScrollView
があります。この中に、この制約を持つUIStackView
を追加します。
stackView.centerYAnchor.constraintEqualToAnchor(selectedContactsScrollView.centerYAnchor).active = true
stackView.leadingAnchor.constraintEqualToAnchor(selectedContactsScrollView.leadingAnchor).active = true
スタックビュー内にいくつかのビューを追加します。
私の問題は、制約のために、スタックビューに追加された最初のビューのリーディングエッジが0になることです。
最初のビューにパディングを追加する方法は何ですか?スクロールビューの制約を調整しません。
あなたが提供したソリューションは、UIStackView内にビューのパディングを追加しません(質問で望んだように)が、UIStackViewのリーディングを追加します。
解決策は、元のUIStackView内に別のUIStackViewを追加し、この新しいUIStackVIewへのリードを与えることです。次に、この新しいUIStackViewにビューを追加します。
ヒント、Interface Builderを使用して完全に行うことができます。つまり、そのためのコードを記述する必要はありません。
isLayoutMarginsRelativeArrangement
プロパティがtrueの場合、スタックビューは、レイアウトマージンを基準にして配置されたビューをレイアウトします。
stackView.layoutMargins = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)
stackView.isLayoutMarginsRelativeArrangement = true
ただし、スタックビュー内に配置されたすべてのビューに影響します。配置された1つのビューだけにこのパディングが必要な場合は、ネストされたUIStackView
を使用する必要があります
スタックビュー内では制約が機能しないか、やや奇妙に見えることがわかりました。
(画像スタックビューの選択にリーディング/トレーリング制約を追加するように、それはコレクションビューにもリーディングを追加しますが、トレーリングは追加しません;そしてそれは確かに競合します)。
Stackview内のすべてのビューのレイアウトマージンを設定するには、次を選択します。
Stack View > Size Inspector > Layout Margins > Fixed
注:スクリーンショットに見られるように、"Fixed"
オプションは以前"Explicit"
と呼ばれていました。
次に、パディングを追加します。
私のために働いたのは、単なるスペーサーである別のUIViewをスタックビューに追加することです(少なくともstackView.distribution = .Fillで動作します):
let spacerView = UIView(frame: CGRect(x: 0, y: 0, width: 10, height: 10))
stackView.addArrangedSubview(spacerView)
stackView.addArrangedSubview(viewThatNeedsSpaceBeforeIt)
stackView.addArrangedSubview(NextView)...
Swift 3:次の方法でオフセットを設定するだけです。
firstView.leadingAnchor.constraint(equalTo: parentView.leadingAnchor, constant: 200).isActive = true
parentView.addArrangdSubView(firstView)
の後にこの制約が設定されていることを確認してください
先頭のパディングだけが必要な場合は、スタックビューのAlignmentを「Trailing」に設定すると、含まれるサブビューのそれぞれに一意のLeading制約を自由に指定できます。
ボーナスとして、スタックビューの配置を「中央」に設定してから、先行および/または後続の制約を使用して、各アイテムに両側に独自のパディングを与えることもできます。
この質問にはすでに良い答えがありますが、1つの提案として、spacing
プロパティを使用してビュー間の間隔を設定します。最初と最後のビューには、@ tolppが推奨するようにインセットを設定するか、パディングを追加する定数を使用して親に制約を追加する(スタックビュー)の2つのオプションがあります。
私たちがしたことは、透明なコンポーネント(UIButton/UIViewなど)をUIStackViewの最初と最後の子として追加することでした。次に、これらの非表示の子の幅を制限して、パディングを調整します。