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

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 的乘数属性吗?

使用乘数的 Swift 约束与尾随但不领先

使用 JavaScript/jQuery 将 URL 保存在锚标记中?

使用php在锚定标记之间提取url

如何使用 querySelector 在锚标记的 href 属性末尾定位哈希?

在锚元素之后使用 :after 伪元素 - 浏览器差异