Ios 自动布局理解乘法器

Ios 自动布局理解乘法器,ios,iphone,autolayout,Ios,Iphone,Autolayout,我对乘法器有问题,无法理解此功能是如何工作的。例如,我的视图有6:1的乘数(到SuperView.Leading),如下所示 当我将乘数改为2:1时,它看起来像下图 我的问题是在6:1的关系中,6和1是什么意思。在2:1的关系中,2和1是什么意思。类似的考虑你有下面的图片三视图。子视图和超级视图之间总共有4个空白区域。我怎么能说每个空白区域都必须是SuperView.Width/6(并且每个空白宽度必须相等) 提前感谢。在我的示例中,乘数是1:2=0.5 红色视图的高度是superview

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

当我将乘数改为2:1时,它看起来像下图

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


提前感谢。

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

红色视图的高度是superview的0.5倍


乘数用于创建比例约束。自动布局将第一个项目的属性计算为第二个项目的属性与此乘数的乘积。除1以外的任何值都会创建比例约束

在你的例子中,6:1意味着乘数是6/1=6。也就是说

view.leading  = Superview.leadingMargin*6

替换为
/
-您将理解它的含义。

当涉及乘数时,它取决于您处理的约束条件。将“视图前导”约束连接到superview前导边距。当该常数为0时,会产生8点的间距。当你改变乘数时,你将影响这个差距。这就是为什么当你做2:1时,你会看到它向右移动8点。基本上是将原来的8点间距乘以2。如果你做1:2,它将从8点变为4点,基本上是将原来的8点边距除以2

现在,当你看阿德里安的例子时,他只把它乘以1:2,那怎么会使它占到整个屏幕的一半呢?那是因为他是在高度限制下做的。该视图最初是superview的全尺寸,但当他将其乘以1:2时,他表示希望它是其原始高度的1/2。给你最后的结果

因此,需要理解的重要一点是,乘数的作用可能因情况而异,但这是因为它取决于您所处理的约束条件

下面是一个很好的答案,可以进一步说明:

该链接详细说明了如果要使前缘为10%,后缘为90%,则需要设置与后缘相关的两个约束

将尾部约束乘以0.9,将前导约束乘以0.1


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

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

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

Y=Mx+C

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

因此,假设您拥有 414(宽)x 736(高)尺寸。在该视图上,假设您创建了子视图

现在,如果希望子视图的大小恰好是superview大小的一半,则只需将两个约束从子视图拖动到superview即可。(即等宽等高)

看到这张图了吗

很明显,现在您将得到一个错误。就像我现在得到的一样。(见下图)

现在逐个单击这两个约束,并使用乘数0.5。然后用上面的直线方程。 这里0.5表示您希望子视图的宽度=superviewWidth/2.0,即207 px

换句话说,您也可以提供乘数207:414

Y即子视图宽度=((M即0.5)*(x即414即超视图宽度))+(常数即零)

最后得到子视图宽度=207 px

子视图的高度也是如此。提供乘数0.5或368:736

完成所有操作后,不要忘记单击子视图并更新帧。


这样常数和乘数就可以工作。

为了更好地理解,直接使用0.5而不是1:2。如果您查看apple文档,则会看到autolayout属性的每个细节。。。你需要先检查一下谢谢!一个小音符:0.5*414=207:)