无法转换类型的价值' UILabel'预期的参数类型' [String:Any]'

时间:2018-04-17 17:27:02

标签: swift string label constraints

我无法让我的名字转换为。

override func setupViews() {
        super.setupViews()

        addSubview(nameLbl)
        addConstraints([NSLayoutConstraint.constraints(withVisualFormat: "H:|[v0]|", options: [], metrics: nil, views: nameLbl)])
    }
}

3 个答案:

答案 0 :(得分:0)

问题出在这里

views: nameLbl

你必须传递一个字典 - > [String:Any]作为参数而不是UILabel,因为错误状态为

views:[String:Any]

//

正确的语法就像这样

let views: [String: UILabel] = ["nameLbl": nameLbl]
NSLayoutConstraint.constraints(withVisualFormat: "H:|[nameLbl(150)]|", options: [], metrics: nil, views: views)

答案 1 :(得分:0)

视图需要字典而不是视图。您需要使用字典(在您的情况下),如下所示:

let views: [String: Any] = ["v0": nameLbl]

它们:

addConstraints([NSLayoutConstraint.constraints(withVisualFormat: "H:|[v0]|", options: [], metrics: nil, views: views)])

答案 2 :(得分:0)

函数constraints(withVisualFormat:options:metrics:views:)[String:Any]参数采用类型为views的字典。您已在约束字符串中命名了标签v0,因此您应该使用

let constraints = NSLayoutConstraint.constraints(
  withVisualFormat: "H:|[v0]|", 
  options: [], 
  metrics: nil, 
  views: ["v0" : nameLbl])
addConstraints(constraints)

(请注意,函数constraints(withVisualFormat:options:metrics:views:)会返回一组约束,因此您无需将其括在大括号中。如果执行将其括在大括号中,您将拥有一个数组包含一系列约束,这不是你想要的。)