AutoLayout了解乘数

时间:2016-12-19 06:34:27

标签: ios iphone autolayout

我遇到乘数问题,无法理解此功能的工作原理。例如,我有视图有6:1乘数(To SuperView.Leading),如下所示。

SuperView.Leading with 6:1 multiplier picture    当我将乘数更改为2:1时,它似乎在下面。

enter image description here 我的问题是6:1的关系,6和1是什么意思。并且在2:1的关系中,2和1的意思是什么。类似的考虑你有三个视图,如下图所示。子视图和superView之间总共有4个空白区域。我怎么说每个空白区域必须是SuperView.Width / 6(并且每个空白宽度必须相等) enter image description here

提前致谢。

4 个答案:

答案 0 :(得分:8)

使用自动布局时,尤其是在使用比例布局时,必须使用乘数。

我必须在这里解释一些数学。 我们知道直线方程。

Y = Mx + C

在上面的等式中。假设M是你的乘数,C是你的常数。

因此假设你有超级视图(如果是iphone 6s plus) 414(宽)x 736(高)尺寸。在该视图中假设您创建了子视图。

现在,如果您希望子视图大小超出superview大小的一半,则只需将两个约束从子视图拖到superview。 (即等宽和等高)

见图片

enter image description here

显然现在你会收到错误。就像我得到的一样。 (见下图)

enter image description here

现在逐个点击两个约束,并使用乘数为0.5。然后使用上面的直线方程。 这里0.5表示你想要subview = superviewWidth / 2.0的宽度,即212 px。

换句话说,你也可以提供乘数212:414。

Y即subviewWidth =((M即0.5)*(x即414,即superviewWidth))+(常数,即零)

最后你得到subviewWidth = 212 px

同样适用于子视图的高度。提供乘数0.5或368:736。

完成所有操作后,请不要忘记点击子视图并更新相框。

这样常数和乘数就可以了。

答案 1 :(得分:3)

在我的例子中,乘数是1:2 = 0.5

高度红色视图比superview

大0.5倍

enter image description here

答案 2 :(得分:3)

乘数用于创建比例约束。自动布局计算第一项的属性为second item’s attribute and this multiplier的乘积。除1以外的任何值都会创建比例约束。

在你的情况下,6:1表示乘数是6/1 = 6.这意味着

view.leading  = Superview.leadingMargin*6

:替换为/ - 您将了解其含义。

答案 3 :(得分:2)

当谈到乘数时,它取决于你正在处理的约束。您具有连接到superview前导边距的视图前导约束。当常数为0时,会给出8点的差距。当您更改乘数时,您将影响该差距。这就是为什么当你做2:1时你会看到它正确的8点。基本上将原来的8点差距乘以2.如果你做1:2它将从8点变为4点,基本上将原来的8点差距除以2。

现在,当你看看阿德里安斯的例子时,他只将它乘以1:2,那么它是如何使它成为整个屏幕的一半?那是因为他在高度限制上做到了这一点。视图最初是超视图的全尺寸,但当他将它乘以1:2时,他表示他希望它是原始高度的1/2。给你最终结果。

因此,重要的是要理解乘数可能会因情况而异,但这取决于您正在处理的约束。

这里有一个很好的答案: Understanding multiplier in auto layout to use relative positioning

该链接详细说明了如果您想要使前缘10%和后缘90%,您需要设置相对于后缘的两个约束。

将尾随约束乘以0.9,将前导约束乘以0.1。

关于有关同等分离视图的问题,您应该使用堆栈视图。它们是为这种情况而制作的,所以你不必处理所有的限制。您只需要为堆栈视图设置约束并相应地进行配置。