在锚上实际使用乘数可以吗?
Posted
技术标签:
【中文标题】在锚上实际使用乘数可以吗?【英文标题】:Is it ok to actually use multipliers on anchors? 【发布时间】:2018-10-12 12:57:19 【问题描述】:可以在锚点和中心上使用乘数吗? 对我来说,至少一开始这根本没有意义,但后来我深入研究了一下,我发现这确实有效。
所以让我解决这个问题。 如果我错了,请告诉我。
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】:在尺寸上使用乘数非常简单...我希望我的子视图是其父视图宽度的 80%,所以我只需使用 0.8
的乘数设置相等宽度
但是,在前导/尾随/中心/等上使用乘数时可能会令人困惑。
来自苹果的Auto Layout Guide:
所以,例如,让我们说:
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 的 Trailing 与其 Width 不同。
假设 Blue 的领先在 50
?如果它的 Width 是 100,它的 Trailing 就是 150,所以:
Red's Leading will be (1.0 x 150) + 8 = 158
现在,将 Blue's Leading 放回 0
,但让我们将 Multiplier 更改为 0.75
Red's Leading will be (0.75 x 100) + 8 = 83
并且,如果蓝色的领先是 50,那么蓝色的尾随是 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
对于第 1 组,乘数为 1.0
- 对于第 #2、#3 和 #4 组,乘数为 0.5
。
第 1 组,Blue 的领先是 0
,Green 的乘数是 1
...这是人们通常看到的,很明显 - 绿色距离 Blue 的 Trailing 有 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 组中,绿色最终成为蓝色的左侧,这是正确的,但并不是那么直观。
【讨论】:
是的。但完全相同的公式会导致问题。人们无法理解乘数 * 前导/尾随/顶部/底部......人们只能轻松理解乘数 * 大小......实际上就是这样。苹果文档只是 sux。所以我的假设是正确的。这是实际使用的公式,其中轴更像位置。 C1.axis = C2.axis * M + C C1.axis = C2.axis + axisLength * M + C ? PS:当我比较这些锚点时,我实际上提到了尺寸......所以尾随 - 前导 = 宽度,底部 - 顶部 = 高度等等。 @AlinLipan - 我添加了一些视觉示例以(希望)确保解释清楚。 感谢您提供的视觉效果,它实际上与我的预期不同。乘数与宽度无关......它实际上取决于整个前导 + 宽度的东西。以上是关于在锚上实际使用乘数可以吗?的主要内容,如果未能解决你的问题,请参考以下文章
我可以更改 NSLayoutConstraint 的乘数属性吗?
使用 JavaScript/jQuery 将 URL 保存在锚标记中?