NSLayoutConstraint constraintWithItem ...排序
NSLayoutConstraint constraintWithItem... ordering
每当我通过 +constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:
创建一个 NSLayoutConstraint
时,我似乎总是以错误的顺序结束项目,然后我必须颠倒它们。这太烦人了,我似乎想不出任何方法可以在实际 运行 代码之前告诉它结果如何。例如,我希望这段代码将 view
16 点定位在 self.view
前沿的右侧,这对我来说很直观,因为参数的顺序是:
NSLayoutConstraint *leadingMarginConstraint = [NSLayoutConstraint constraintWithItem:self.view
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:view
attribute:NSLayoutAttributeLeading
multiplier:1
constant:16];
然而,恰恰相反。 view
的前缘在 self.view
的前缘左边 16 个点。与此相同:
NSLayoutConstraint *verticalSpacingConstraint = [NSLayoutConstraint constraintWithItem:view1
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:view2
attribute:NSLayoutAttributeTop
multiplier:1
constant:16];
我预计 view2
的顶部比 view1
的底部低 16 点,但恰恰相反。 view2
的顶部比 view1
的底部高 16 点。
任何人都可以向我解释这是如何工作的吗?参数顺序有什么意义?
谢谢!
具体来说,约束代表这个等式:y = m*x + b。
其中'x'和'y'是视图属性,'b'是常数,'m'是乘数。 'x' 和 'y' 分别映射到您正在调用的方法中的第一项和第二项。因此,如果 y 代表视图 2 的顶部,则 x 将是视图 2 的高度 + 16.
希望对您有所帮助。
您必须查看定义约束的方程式。对于你的第一个例子,你所说的是,
self.view.leading = view.leading x 1 + 16
self.view.leading 必须为 0(根据定义),因此要使该等式起作用,视图的前沿需要为 -16。
每当我通过 +constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:
创建一个 NSLayoutConstraint
时,我似乎总是以错误的顺序结束项目,然后我必须颠倒它们。这太烦人了,我似乎想不出任何方法可以在实际 运行 代码之前告诉它结果如何。例如,我希望这段代码将 view
16 点定位在 self.view
前沿的右侧,这对我来说很直观,因为参数的顺序是:
NSLayoutConstraint *leadingMarginConstraint = [NSLayoutConstraint constraintWithItem:self.view
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:view
attribute:NSLayoutAttributeLeading
multiplier:1
constant:16];
然而,恰恰相反。 view
的前缘在 self.view
的前缘左边 16 个点。与此相同:
NSLayoutConstraint *verticalSpacingConstraint = [NSLayoutConstraint constraintWithItem:view1
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:view2
attribute:NSLayoutAttributeTop
multiplier:1
constant:16];
我预计 view2
的顶部比 view1
的底部低 16 点,但恰恰相反。 view2
的顶部比 view1
的底部高 16 点。
任何人都可以向我解释这是如何工作的吗?参数顺序有什么意义?
谢谢!
具体来说,约束代表这个等式:y = m*x + b。
其中'x'和'y'是视图属性,'b'是常数,'m'是乘数。 'x' 和 'y' 分别映射到您正在调用的方法中的第一项和第二项。因此,如果 y 代表视图 2 的顶部,则 x 将是视图 2 的高度 + 16.
希望对您有所帮助。
您必须查看定义约束的方程式。对于你的第一个例子,你所说的是,
self.view.leading = view.leading x 1 + 16
self.view.leading 必须为 0(根据定义),因此要使该等式起作用,视图的前沿需要为 -16。