Autolayout制約を使用して、ビュー内のいくつかの同様のサイズのボタンのサイズを自動的に変更して、次の効果を得ようとしています。
サイズ変更前
サイズ変更後の望ましい効果
ご存じのように、ボタンのサイズは同じにし、各ボタンの間隔も一定の20ポイントにする必要があります。最初はかなりシンプルに見えるので、次の制約を設定します。
サイズ変更後に実際に何が起こるか
プレビュー中、またはiPhone /シミュレーターでアプリをテスト実行すると、ボタンのサイズが変更され、ボタンに設定した同じ幅制約にも従いません。実際、ビューを含むビューも、新しいボタンのサイズに合わせてサイズ変更されます。インターフェースビルダーでこの問題を純粋に修正する方法を誰もが知っていますか?
設定:
-等しい幅すべてのボタンの
-水平間隔すべてのボタンの間
-leading最初のボタンのスーパービューに、trailing最後のボタンのスーパービュー
仕事をする必要があります。スーパービューに問題がない場合(例:ScrollViewの制約がない)
インターフェイスビルダーでは、上記のようにボタン間の間隔の制約を設定します。次に、それらすべてをコマンド選択して、選択したオブジェクトに適用する「等しい幅」制約を指定できます。
最後に、この問題を解決する方法を忘れてしまいました。私はそれが魅力のように機能することをテストしました。
1:5
に設定します-24
に設定します(アイテムと親Edgeの間の6つの分離は120
を与え、これに乗数値1:5
を掛けると24
を与えます)それでおしまい!以下の画像は、インターフェイスビルダーでの動作を示しています。
シミュレーションサイズを「フリーフォーム」に設定し、さまざまな幅をテストします(これを330
に設定しました)。
この問題は、間違ったcontent hugging priority
およびcontent compression Resistance priority
。したがって、それらを低コンテンツハグおよび高圧縮抵抗として設定する必要があります(すべて同じ値にする必要があります)。
コンテンツのハグは、成長とコンテンツの圧縮に対する見方に抵抗する特性であるため、抵抗の優先順位は、縮小に対する見方に抵抗することです。これらの詳細については、この 質問 を参照してください。