在锚点上实际使用乘数可以吗?

时间:2018-10-12 12:57:20

标签: ios autolayout constraints

可以在锚点和中心使用乘法器吗? 对我来说,至少对于一开始来说,这根本没有任何意义,但后来我进行了深入研究,发现这确实有效。

所以让我陷入困境。 请告诉我我是否错了。

1)以1的乘数开头=尾随?我已经看到,乘数为0.1的开头表示内部为10%(基于宽度)。

2)中心乘以2 =尾随?通过假设中心表示尾随/ 2或前导* 0.5?

据我了解,乘数实际上是基于轴乘以宽度/高度。

这意味着以下约束是等效的吗?

C1.axis = C2.axis * M + C <=> C1.axis = C2.axis + axisLength * M + C?

所以乘数只是将宽度或高度的倍数相加?

更新:

因此,要从接受的答案中清除信息。

CenterX_or_Y = Width_or_Height / 2
Trailing - Leading = Width  (in therms of size)
Bottom   - Top     = Height (in therms of size)

当您在前导/尾随/顶部/底部实际使用乘数时,实际上是在上述尺寸(宽度或高度)上使用乘数。

1 个答案:

答案 0 :(得分:1)

在大小上使用乘数非常简单...我希望子视图为其视图的宽度的80%,因此我只需使用0.8的乘数设置等宽

但是,在前导/尾随/居中/等位置使用乘数时,可能会造成混淆。

来自Apple的Auto Layout Guide

enter image description here

例如,让我们说:

Red Leading is set to Blue Trailing, Constant 8, Multiplier 1
Blue Leading is at 0, and width is 100

Red's Leading will be (1.0 x 100) + 8 = 108

不过,要清楚一点,蓝色的拖尾与其宽度不同。

假设Blue的领先优势在50?如果其宽度为100,则尾随将为150,因此:

Red's Leading will be (1.0 x 150) + 8 = 158

现在,将Blue's Leading放回0,但我们将乘数更改为0.75

Red's Leading will be (0.75 x 100) + 8 = 83

如果Blue的Leading为50,则Blue的Trailing为150:

Red's Leading will be (0.75 x 150) + 8 = 120.5

只需参考公式即可使事情变得简单

item1.attribute = multiplier * item2.attribute + constant

这是一个直观的例子。所有标签均为100x40,每个绿色标签均受约束为Green.Leading = Blue.Trailing + Constant:8

enter image description here

对于#1集,乘数为1.0-对于#2,#3和#4集,乘数为0.5

第1组,蓝色的前导为0,绿色的乘数为1 ...这是通常看到的,很明显-绿色比蓝色的尾数高8点,即(Blue.Leading + Blue.Width),或

1.0 * (0 + 100) = 100
100 + 8 = 108

第2组,蓝色的行距仍为0,但绿色的乘数为0.5 ...因此,绿色距蓝色的尾随距离为8点,即(Blue.Leading + Blue.Width), * 0.5或

0.5 * (0 + 100) = 50
50 + 8 = 58

第3组,蓝色的前导现在为80,绿色的乘数仍为0.5 ...因此,绿色距蓝色的尾随为8点,即(Blue.Leading + Blue.Width), * 0.5或

0.5 * (80 + 100) = 90
90 + 8 = 98

组4看起来很奇怪。蓝色的行距现在为200,绿色的乘数仍为0.5 ...因此,绿色距蓝色的尾随距离为8点,即(Blue.Leading + Blue.Width),* 0.5或

0.5 * (200 + 100) = 150
150 + 8 = 158

我们看到,在第4组中,绿色最终变成了蓝色的左侧,这是正确的,但并非所有直观的方法。