字符串与NSObject错误不同,同时在Swift中应用约束(视觉约束)

San*_*wat 3 nsdictionary ios nslayoutconstraint swift

import UIKit
import Foundation
class DetailView: UIViewController{
    var fullImage:UIImageView?
    var nameLabel:UILabel?
    var detailLabel:UILabel?

    override  func viewDidLoad() {
        super.viewDidLoad()
        fullImage = UIImageView()
        nameLabel = UILabel()
        detailLabel = UILabel()
        self.view.addSubview(fullImage!)
        self.view.addSubview(nameLabel!)
        self.view.addSubview(detailLabel!)
    }

    func applyContraints(){
        self.view.addSubview(fullImage!)

     fullImage?.setTranslatesAutoresizingMaskIntoConstraints(false)
     nameLabel?.setTranslatesAutoresizingMaskIntoConstraints(false)
     detailLabel?.setTranslatesAutoresizingMaskIntoConstraints(false)

        var viewsDict:[String:AnyObject!] = ["imageView": fullImage!, "nameLabel": nameLabel!, "detailLabel": detailLabel!]

        var constraints:NSArray

        constraints = NSLayoutConstraint.constraintsWithVisualFormat("H:|-10-[imageView]-10-|",
            options: 0,
            metrics: nil,
            views: viewsDict)
        self.view.addConstraints(constraints)



    }
}
Run Code Online (Sandbox Code Playgroud)

小智 5

所述views的PARAM constraintsWithVisualFormat期望类型的字典[NSObject: AnyObject].

创建时viewsDict,尝试将其声明为[NSObject: AnyObject]:

var viewsDict: [NSObject: AnyObject] = ["imageView": fullImage!, "nameLabel": nameLabel!, "detailLabel": detailLabel!]
Run Code Online (Sandbox Code Playgroud)

您还必须将optionsparam值更改0为nil

此外,如果您想摆脱选项,您可以尝试以下方法:

var fullImage = UIImageView()
var nameLabel = UILabel()
var detailLabel = UILabel()
Run Code Online (Sandbox Code Playgroud)

代替:

var fullImage: UIImageView?
var nameLabel: UILabel?
var detailLabel: UILabel?
Run Code Online (Sandbox Code Playgroud)

然后,对于viewsDict声明,您可以删除!:

var viewsDict: [NSObject: AnyObject] = ["imageView": fullImage, "nameLabel": nameLabel, "detailLabel": detailLabel]
Run Code Online (Sandbox Code Playgroud)


gab*_*ler 5

请更改options:0为options: NSLayoutFormatOptions(0),这是正确的语法.