自动布局中乘数和常数之间的差异

时间:2018-12-13 02:34:23

标签: ios autolayout

我目前正在学习如何以编程方式创建布局约束。所以到目前为止,我认为 Constant 是UIElement的大小(例如高度或宽度)的值,而 Multiplier 是我们需要与SuperView相乘的值,例如

titleLabel.widthAnchor.constraint(equalTo : thumbImageView.widthAnchor, multiplier : 0.5)

因此,根据上面的代码,

if thumbImageView.width = 40(constant), the width of titleLabel = 20(halved by multiplier)

addConstraint(NSLayoutConstraint(item: subtitleTextView, attribute: .height, relatedBy: .equal, toItem: self, attribute: .height, multiplier: 0, constant: 20))

现在在上面的代码中,常数为20,乘数为0,所以结果将为零,对吗?但是它显示的是20号文本视图。

Screen Shot

因此,当我更改乘数为1且常数为20的代码时,它的绘制超出了单元格。

addConstraint(NSLayoutConstraint(item: titleLabel, attribute: .height, relatedBy: .equal, toItem: self, attribute: .height, multiplier: 1, constant: 20))

Screen Shot

我的问题是:

1。乘数和常数之间的关系和区别是什么?  2.我有些理解,如果在其中提到两种观点     约束,乘数不能为零。这是对的吗?  3.为什么文本视图沿单元格拖动?

2 个答案:

答案 0 :(得分:2)

  1. 将首先计算乘数。例如,使用乘数0.5使ALabel的宽度等于BLabel的宽度。自动版式将获得BLabel的宽度并乘以0.5,然后将结果设置为ALabel的宽度。
  2. Constant将调整步骤1的结果。正数表示增大,而负数减小。

答案 1 :(得分:2)

自动布局约束的工作就像数学函数一样

item1.atribute = Multiplier * item2.atribute  + constant 

以您为例:
   titleLabel.width = 0.5 * thumbImageView.width + 0

如果未指定乘数和常数,则使用默认值。乘数的默认值= 1,常数= 0

请查看苹果的自动布局指南以获取更多详细信息:AutoLayout Guide of Apple