无法将'[NSLayoutConstraint]'类型的值转换为预期的参数类型'NSLayoutConstraint'

1 constraints swift ios-autolayout

我正在使用xcode 9 beta 5.我实际上添加了逆向

addConstraint(NSLayoutConstraint.constraints(withVisualFormat: "H: |-16-[v0]-16-|" , options: NSLayoutFormatOptions(), metrics: nil, views: ["v0":thumbnailImageView]))

addConstraint(NSLayoutConstraint.constraints(withVisualFormat: "V: |-16-[v0]-16-|" , options: NSLayoutFormatOptions(), metrics: nil, views: ["v0":thumbnailImageView]))
Run Code Online (Sandbox Code Playgroud)

我收到了错误.

addConstraint(NSLayoutConstraint.constraints(withVisualFormat: "H: |-16-[v0]-16-|" , options: NSLayoutFormatOptions(), metrics: nil, views: ["v0":thumbnailImageView]))

addConstraint(NSLayoutConstraint.constraints(withVisualFormat: "V: |-16-[v0]-16-|" , options: NSLayoutFormatOptions(), metrics: nil, views: ["v0":thumbnailImageView]))
Run Code Online (Sandbox Code Playgroud)

错误图片

如何删除此错误?

vac*_*ama 10

问题是NSLayoutConstraint.constraints(withVisualFormat:options:metrics:views)返回一组约束,而不仅仅是一个约束.

从iOS8开始,建议激活约束而不是将它们添加到视图中.对于单个约束,您可以将其isActive属性设置为true,并且iOS会将该约束添加到正确的视图以激活它.

对于多个约束,使用NSLayoutConstraint.activate激活约束而不是将它们添加到视图中:

NSLayoutConstraint.activate(NSLayoutConstraint.constraints(withVisualFormat: "H:|-16-[v0]-16-|", metrics: nil, views: ["v0":thumbnailImageView]))
NSLayoutConstraint.activate(NSLayoutConstraint.constraints(withVisualFormat: "V:|-16-[v0]-16-|", metrics: nil, views: ["v0":thumbnailImageView]))
Run Code Online (Sandbox Code Playgroud)


vad*_*ian 6

UIView 有两种添加约束的方法:

  • func addConstraint(_ constraint: NSLayoutConstraint)

    一个希望将单个 NSLayoutConstraint

  • func addConstraints(_ constraints: [NSLayoutConstraint])

    它期望的阵列NSLayoutConstraint实例

只需使用适当的API


小智 5

您必须使用“addConstraints”而不是“addConstraint”