2016-05-16 6 views
0

UIViewUIViewに含まれています。これらのサブビューには垂直マージンの制約があります。その高さは一定です。ストーリーボード:表示の高さに対するスペーシングの間隔を変更する

私は両方の高さの制約が私の高さの1が0に等しい場合、私はちょうど二サブビューの垂直方向の間隔を維持したいと思います0

に等しい場合、私のマージンは完全に消えたいと思います。

どうすればいいですか?

通常の設定です。垂直方向の間隔が良好であり、高さが0に等しいです。しかし、私はまだ垂直間隔の制約を持っている0

高さから異なっています。私のコンテナビューの高さも0にする必要があります

答えて

0

ここでは、プログラムで制約を変更することをお勧めします。それぞれの制約に対してIBOutletを作成し、配線します。そこから、各拘束の高さにオブザーバ(addObserver:forKeyPath:options:context:メソッドを使用)を設定し、1つまたは両方の高さが0に等しい場合、垂直スペーシングの制約を適切に変更できます(ビュー内のobserveValueForKeyPath:ofObject:change:context:メソッドをオーバーライドすることでこれを行うことができます)これらのビューを処理しているコントローラ)。

Observerのdeinit(Swiftの場合はdeinit、ObjCの場合はdeallocが最適です)のオブザーバを削除することを忘れないでください。

+0

これは非常に非効率的で、ビューが描画されるたびに計算を実行すると、名目金利に悪影響を及ぼす可能性があります。 –

+0

合意しました。このソリューションはスケーラブルではありません。 – Pete

0

マージンのスーパービューに等しい等高さの制約を与えることができますが、乗数は1.0未満にします。他の2つのビューは、すべての面を親ビューとマージンビューに固定します。あなたはIBでそれをすべてやることができ、それはうまくいくでしょう。

+0

あなたの解決策を試してみてください。スーパービューの高さが100の場合、各マージン制約に100の一定値を与え、次にそれらに(実際の制約値:高さ)の乗数を与える必要がありますか? – Pete

+0

スーパービューに同じ高さの制約を与える必要はありません。 –

関連する問題