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

时间:2015-02-11 13:53:02

标签: ios swift visual-format-language

我似乎遇到了NSLayoutConstraint的问题。从我可以收集的内容(我希望我在这里错了),.addConstrait()函数应该采用NSLayoutContraint类型的变量 - 但NSLayoutConstraint.constraintsWithVisualFormat()生成NSArray s?

这对我没有意义。我已经尝试将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'

有人能指出我出错的地方。

2 个答案:

答案 0 :(得分:3)

constraintsWithVisualFormat(_:options:metrics:views:)返回NSArray的{​​{1}}。

只需使用NSLayoutConstraint代替addConstraints(_:)

addConstraint(_:)

答案 1 :(得分:1)

addConstraint方法需要一个约束,但constraintsWithVisualFormat会返回零{或}个约束的NSArray

尝试添加s。

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

Apple的命名约定通常可以帮助你。请注意,constraintsWithVisualFormat是复数,addConstraint是单数(addConstraints是复数)。