2016-12-19 2 views
1

乗数に問題があり、この機能の仕組みを理解できません。例えば、私は以下のように6:1の乗数(SuperView.Leadingへ)を持っているビューを持っています。AutoLayout乗算器を理解する

SuperView.Leading with 6:1 multiplier picture 私が2:1に乗数を変更すると、次のようになります。

enter image description here 私の質問は6:1関係にあります。6と1はどういう意味ですか?また、2:1の関係では、2と1の意味は何ですか?同様に、下の図のように3つのビューがあると考えてください。完全にサブビューとスーパービューの間に4つの空白領域があります。どのように私は、事前に enter image description here

おかげで、すべての空白領域がSuperView.Width/6(およびすべての空白の幅が同じでなければならない)でなければならないと言うことができます。

+0

1:2の代わりに直接0.5を使用してください。 – AnshaD

+1

Appleのドキュメントをチェックすると、autolayoutのプロパティの詳細がすべて表示されます。 –

答えて

2

autolayoutで作業する場合、特に比例的なレイアウトで作業する場合は、乗数を使用する必要があります。

私はいくつかの数学をここで説明しなければなりません。 私たちは、スターグランド線方程式を知っています。

Y = Mx + C

上記の式では、 Mはあなたの乗数で、Cはあなたの定数です。

414(幅)x 736(高さ)のスーパービュー(iphone 6s plusの場合)があるとします。そのビューでは、サブビューを作成したとします。

サブビューサイズをスーパービューサイズのほぼ半分にしたい場合、サブビューからスーパービューに2つの制約をドラッグするだけです。 (すなわち、同じ幅と同じ高さ)

明らか

enter image description here

今あなたがエラーを取得します。この画像を参照してください。ちょうど私が得ているように。

enter image description here

今1によって制約1の両方をクリックし、0.5と乗数を使用します(画像の下を参照)。次に、上記の直線方程式を使用します。 ここで0.5は、サブビューの幅= superviewWidth/2.0、つまり212ピクセルを必要とすることを意味します。

つまり、212:414として乗数を指定することもできます。

YすなわちsubviewWidth =((Mすなわち0.5)*(Xすなわち414すなわちsuperviewWidth))+(定数すなわちゼロ)

最後に、あなたは同様にサブビューの高さのために行うsubviewWidth = 212ピクセルに

を取得。乗数0.5または368:736を指定します。

すべてのことが完了したら、サブビューをクリックしてフレームを更新することを忘れないでください。

このように定数と乗数が機能します。

1

私の例乗数は1:2 = 0.5

高赤図で

enter image description here

2

乗算器は比例制約を作成するためのあるスーパーよりも0.5倍大きいです。自動レイアウトでは、最初のアイテムの属性がsecond item’s attribute and this multiplierの製品であると計算されます。 1以外の値は比例制約を作成します。あなたのケースでは

、6:1は、乗算器を意味

view.leading = Superview.leadingMargin*6 

を意味= 6 6/1は/:を交換された - あなたはそれが何を意味するかを理解するだろう。

1

乗算器の場合、それはあなたが扱う制約に依存します。スーパービューの先頭のマージンに接続するビューの先頭の制約があります。定数が0の場合は、8ポイントのギャップが得られます。乗数を変更すると、そのギャップに影響します。あなたが2:1をするとき、それが正しい8つのポイントに行くのが分かります。元の8ポイントのギャップに本質的に2を掛けます。1:2にすると8ポイントから4ポイントになり、元の8ポイントのマージンを2で割ったものになります。

Adrianの例を見ると、それを1:2で掛けたので、画面全体の半分になったのですか?それは彼が高さの制約でそれをしたからです。このビューはもともとスーパービューのフルサイズでしたが、1:2の倍数にすると元の高さの1/2にしたいと考えていました。あなたにその最終結果を与える。

したがって、理解しておくべき重要なことは、状況に応じて乗数が異なるように見えるかもしれないということですが、それはあなたが扱う制約に依存するからです。ここ

は、このよりに入る良い答えです: Understanding multiplier in auto layout to use relative positioning

リンクの詳細あなたが90%をリーディングエッジには10%を作りたかったと、後縁場合はに関連して、両方の制約を設定する必要があるだろうか後縁

後続の制約に0.9、先頭の制約に0.1を掛けます。

均等に分割されたビューに関するご質問に関しては、スタックビューを使用する必要があります。このような状況のために作られたので、すべての制約に対処する必要はありませんでした。スタックビューの制約を設定し、それに応じて設定するだけで済みます。