だから、あなたはこの持っている:

をし、問題がありますあなたが最初の内側のスタックを折りたたむ際に、あなたは、自動レイアウトエラーを取得:
2017-07-02 15:40:02.377297-0500 nestedStackViews[17331:1727436] [LayoutConstraints] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(
"<NSLayoutConstraint:0x62800008ce90 'UISV-canvas-connection' UIStackView:0x7fa57a70fce0.top == UILabel:0x7fa57a70ffb0'Top Label of Inner Stack'.top (active)>",
"<NSLayoutConstraint:0x62800008cf30 'UISV-canvas-connection' V:[UILabel:0x7fa57d30def0'Bottom Label of Inner Sta...']-(0)-| (active, names: '|':UIStackView:0x7fa57a70fce0)>",
"<NSLayoutConstraint:0x62000008bc70 'UISV-hiding' UIStackView:0x7fa57a70fce0.height == 0 (active)>",
"<NSLayoutConstraint:0x62800008cf80 'UISV-spacing' V:[UILabel:0x7fa57a70ffb0'Top Label of Inner Stack']-(8)-[UILabel:0x7fa57d30def0'Bottom Label of Inner Sta...'] (active)>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x62800008cf80 'UISV-spacing' V:[UILabel:0x7fa57a70ffb0'Top Label of Inner Stack']-(8)-[UILabel:0x7fa57d30def0'Bottom Label of Inner Sta...'] (active)>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
問題を、あなたが述べたように、外側のスタック表示がheigを適用するということですht = 0の制約が内側のスタックビューに適用されます。これは、内部スタックビューによって自身のサブビュー間で適用される8ポイントのパディング制約と競合します。両方の制約を同時に満たすことはできません。
外側のスタックビューではこの高さ= 0の制約が使用されています。最初に収縮させずに内側のビューを隠すだけでなく、アニメーション化するとより見栄えがよいからです。
これには簡単な修正があります:UIView
というプレーンで内側のスタックビューをラップし、そのラッパーを非表示にします。私は実証します。
は、ここでは上記の壊れたバージョンのためのシーンの概要です:

内部スタックビューを選択し、問題を解決するには。メニューバーから、編集>埋め込みで>ビューを選択します。

Interface Builderは、私はこれをしなかったときに、ラッパービューの幅の制約を作成したので、その幅の制約を削除します。

:
次に、ラッパーのすべての4つの縁部と内側スタックビュー間の制約を作成します
この時点では、レイアウトは実際には実行時には正しいものの、Interface Builderはそれを正しく描画しません。内側のスタックの子の垂直方向の抱き合わせの優先順位を高く設定することで修正できます。私は800にそれらを設定します。

私たちは、実際にこの時点で充足不能制約の問題を修正していません。これを行うには、作成した下部制約を見つけ、その優先順位を必要以上に低く設定します。のが800に変更してみましょう:あなたはそのhidden
プロパティを変更したため

は最後に、あなたはおそらく、内部スタックビューに接続され、あなたのビューコントローラでアウトレットを持っていました。そのコンセントを変更して、内側のスタックビューの代わりにラッパービューに接続します。コンセントのタイプがUIStackView
の場合は、UIView
に変更する必要があります。鉱山は、すでにタイプUIView
のだったので、私はちょうどストーリーボードでそれを再接続:あなたはラッパービューのhidden
プロパティを切り替えるとき

は今、スタック表示が無い充足不能制約の警告で、崩壊して表示されます。それは実質的に同じように見えるので、私はアプリの別のGIFを掲載している気にしません。
あなたは私のテストプロジェクトin this github repositoryを見つけることができます。
おかげで、今日はそれを試してみるとそれが動作するかどうかの答えを受け入れるだろう:) –