我正在尝试将以下约束设置为我的 float View 之一。
leftConstraint = [NSLayoutConstraint constraintWithItem:detailView
attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationEqual toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:0.0
constant:VIEW_WIDTH];
View 将水平移动并具有固定宽度。我无法将此 View 固定到任何其他 View 。我将更改约束中的常量值以将其移到我的 View 上。
当我在 XCode 6.3 中运行上述约束时,出现以下错误。 “0 的乘数或零第二项与第一个属性的位置一起创建了一个等于常数的位置的非法约束”
我不确定为什么这会产生非法约束。
为了绕过这个问题,我使用了 0.001 乘数,但这并不是在所有情况下都有效。因此,正在寻找更好的解决方法来满足此要求。
最佳答案
这是自动布局使用的公式:
item1.attribute1 = multiplier × item2.attribute2 + constant
因此,如果您将 multiplier 设置为 0 或没有 item2,则 attribute1 将为 常量
。这不是一个好主意,因为它是关于 superview 的约束而不提及 superview。在大多数情况下,这是代码错误的结果。所以 Apple 决定创建这种限制是非法的。
没有第二项的约束对除高度和宽度之外的所有属性均无效。
您实际上应该针对 View 的父 View 显式添加约束。
你的约束应该是这样的
leftConstraint = [NSLayoutConstraint constraintWithItem:detailView
attribute: NSLayoutAttributeLeft
relatedBy: NSLayoutRelationEqual
toItem: detailView.superview
attribute: NSLayoutAttributeLeft
multiplier: 1
constant: VIEW_WIDTH];
关于ios - 自 xcode 6.3 以来 NSLayoutconstraint 损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29622107/