无法将UILabel类型转换为期望的[String : Any]类型问题求助
解决UILabel转[String: Any]的类型转换错误
嗨,这个问题我之前也踩过坑!你出错的核心原因是NSLayoutConstraint.constraints(withVisualFormat:)方法的views参数要求传入键值对字典,但你直接传了nameLbl这个UILabel实例,类型自然不匹配,才会报转换错误。
直接可用的修正代码
把你的约束代码改成下面这样就好:
override func setupViews() { super.setupViews() addSubview(nameLbl) // 将nameLbl放入字典,键名要和VFL里的v0对应 let constraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|[v0]|", options: [], metrics: nil, views: ["v0": nameLbl]) addConstraints(constraints) }
额外小技巧(Swift 4+)
如果你用的是Swift 4或更高版本,还可以用更简洁的写法——利用\语法自动生成字典,前提是VFL里的占位符要和你的视图变量名一致:
override func setupViews() { super.setupViews() addSubview(nameLbl) // 这里VFL的占位符改成nameLbl,和变量名对应 let constraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|[nameLbl]|", options: [], metrics: nil, views: [\nameLbl]) addConstraints(constraints) }
这样写不仅少敲了代码,还能避免键名和VFL占位符不匹配的问题,一举两得~
内容的提问来源于stack exchange,提问作者Connor Woodford
相关产品推荐
相关产品推荐

