布局约束问题:NSArray 不是 NSLayoutConstraint 的子类型

Problems with Layout Constraints: NSArray is not a subtype of NSLayoutConstraint

我似乎对 NSLayoutConstraint 有疑问。据我所知(我希望我在这里错了),.addConstrait() 函数应该采用 NSLayoutContraint 类型的变量 - 但 NSLayoutConstraint.constraintsWithVisualFormat() 正在生成 NSArrays?

这对我来说没有意义。我试过将 NSArray 翻译成 NSLayoutConstraint 但我在这样做时遇到了错误。 NSLayoutConstraint.constraintsWithVisualFormat() 的输出肯定与 .addConstrait() 预期的类型相同??

如果不是为什么不呢?解决这个问题的最佳方法是什么?

代码如下:

    let swiftViews:Dictionary[String: UIView] = ["status":status]
    let swiftMetrics = ["standardWidth":200]
    let views:NSDictionary = swiftViews as NSDictionary
    let metrics:NSDictionary = swiftMetrics as NSDictionary

    let statusHorzVFLCons = NSLayoutConstraint.constraintsWithVisualFormat("|-[status]-|", options: NSLayoutFormatOptions(0), metrics: metrics, views: views)

    self.view.addConstraint(statusHorzVLFCons)

最后一行产生错误:

'NSArray' is not a subtype of 'NSLayoutConstraint'

谁能指出我哪里错了。

constraintsWithVisualFormat(_:options:metrics:views:) returns NSArrayNSLayoutConstraint

只需使用 addConstraints(_:) 而不是 addConstraint(_:)

self.view.addConstraints(statusHorzVLFCons)
                       ^

addConstraint 方法期望单个约束,但是 constraintsWithVisualFormat returns 一个 NSArray 零个或多个约束。

尝试添加一个 s。

[self addConstraints:/*your NSLayoutConstraint constraintsWithVisualFormat: call */];

Apple 的命名约定通常可以帮助您解决这个问题。请注意 constraintsWithVisualFormat 是复数,而 addConstraint 是单数(而 addConstraints 是复数)。