ios - 自 xcode 6.3 以来 NSLayoutconstraint 损坏

标签 ios ios-autolayout

我正在尝试将以下约束设置为我的 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/

相关文章:

ios - libMobileGestalt MobileGestalt.c :890: MGIsDeviceOneOfType is not supported on this platform

ios - 自调整单元格对我不起作用

ios - 如何自动调整 ViewController Root View 的大小以适应其内容?

ios - UITableViewCell accessoryView 不显示

html - Swift - 将 HTML 文本转换为属性字符串

iOS:for循环中对象的属性为空?

swift - 在 Swift 的 UITableViewCell 中以编程方式布局 UILabel 和 UIView subview 的最佳方法

ios - AvFoundation - 如何连接 AVCaptureSession 和 AVAssetWriter?

ios - 表格 View 单元格大小取决于 Storyboard中的预览设备大小

ios - 更改 iPhone 的基本值布局,影响 ipad 布局