无法将类型“[NSLayoutConstraint]”的值转换为预期的参数类型 'NSLayoutConstraint'
Cannot convert value of type '[NSLayoutConstraint]' to expected argument type 'NSLayoutConstraint'
我正在使用 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]))
我遇到错误:
Cannot convert value of type '[NSLayoutConstraint]' to expected argument type 'NSLayoutConstraint'
错误图片
如何消除这个错误?
问题是 NSLayoutConstraint.constraints(withVisualFormat:options:metrics:views)
returns 一组约束,而不仅仅是一个约束。
自 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]))
UIView
有两种添加约束的方法:
func addConstraint(_ constraint: NSLayoutConstraint)
需要 单个 NSLayoutConstraint
和
func addConstraints(_ constraints: [NSLayoutConstraint])
需要 数组 的 NSLayoutConstraint
个实例
只要使用合适的API
你必须使用 'addConstraints' 而不是 'addConstraint'
是的,就我而言,我使用的是:
view.addConstraint(
NSLayoutConstraint.constraints(
withVisualFormat: "H:|[\(label)]|",
options: [],
metrics: nil,
views: viewsDictionary
)
)
遇到了同样的问题。你应该使用 addConstraints(with "s"):
view.addConstraints(
NSLayoutConstraint.constraints(
withVisualFormat: "H:|[\(label)]|",
options: [],
metrics: nil,
views: viewsDictionary
)
)
我正在使用 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]))
我遇到错误:
Cannot convert value of type '[NSLayoutConstraint]' to expected argument type 'NSLayoutConstraint'
错误图片
如何消除这个错误?
问题是 NSLayoutConstraint.constraints(withVisualFormat:options:metrics:views)
returns 一组约束,而不仅仅是一个约束。
自 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]))
UIView
有两种添加约束的方法:
func addConstraint(_ constraint: NSLayoutConstraint)
需要 单个
NSLayoutConstraint
和func addConstraints(_ constraints: [NSLayoutConstraint])
需要 数组 的
NSLayoutConstraint
个实例
只要使用合适的API
你必须使用 'addConstraints' 而不是 'addConstraint'
是的,就我而言,我使用的是:
view.addConstraint(
NSLayoutConstraint.constraints(
withVisualFormat: "H:|[\(label)]|",
options: [],
metrics: nil,
views: viewsDictionary
)
)
遇到了同样的问题。你应该使用 addConstraints(with "s"):
view.addConstraints(
NSLayoutConstraint.constraints(
withVisualFormat: "H:|[\(label)]|",
options: [],
metrics: nil,
views: viewsDictionary
)
)