Ios 以编程方式添加到UITableViewCell的布局约束

Ios 以编程方式添加到UITableViewCell的布局约束,ios,nslayoutconstraint,Ios,Nslayoutconstraint,我试图重现此屏幕截图中应用于静态UITableViewCell的约束: 以下是我尝试执行此操作的代码: @IBOutlet weak var cellTest: UITableViewCell! override func viewDidLoad() { super.viewDidLoad() cellTest.backgroundColor = UIColor.yellowColor() let vw = UIView() vw.backgroundCo

我试图重现此屏幕截图中应用于静态UITableViewCell的约束:

以下是我尝试执行此操作的代码:

@IBOutlet weak var cellTest: UITableViewCell!

override func viewDidLoad() {
    super.viewDidLoad()

    cellTest.backgroundColor = UIColor.yellowColor()

    let vw = UIView()
    vw.backgroundColor = UIColor.greenColor()

    cellTest.contentView.addSubview(vw)

    cellTest.contentView.translatesAutoresizingMaskIntoConstraints = false
    vw.translatesAutoresizingMaskIntoConstraints = false

    let constraintWidth = NSLayoutConstraint(item: vw, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 400)

    let constraintHeight = NSLayoutConstraint(item: vw, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 150)

    let constraintCentreX = NSLayoutConstraint(item: vw, attribute: .CenterX, relatedBy: .Equal, toItem: vw.superview!, attribute: .CenterX, multiplier: 1, constant: 0)

    let constraintCentreY = NSLayoutConstraint(item: vw, attribute: .CenterY, relatedBy: .Equal, toItem: vw.superview!, attribute: .CenterY, multiplier: 1, constant: 0)

    cellTest.contentView.addConstraints([constraintWidth, constraintHeight, constraintCentreX, constraintCentreY ])
}
但是,下面是意外的输出,视图位于左上角,而不是居中。非常感谢您的帮助,因为我花了相当长的时间试图解决这个问题:


我还需要向单元格的contentView添加约束。这些将添加到单元格本身

下面是代码和屏幕截图

@IBOutlet weak var cellTest: UITableViewCell!

override func viewDidLoad() {
    super.viewDidLoad()

    cellTest.backgroundColor = UIColor.yellowColor()

    let vw = UIView()
    vw.backgroundColor = UIColor.greenColor()

    cellTest.contentView.addSubview(vw)

    cellTest.contentView.translatesAutoresizingMaskIntoConstraints = false
    vw.translatesAutoresizingMaskIntoConstraints = false


    let bottomConstraint = NSLayoutConstraint(item: cellTest.contentView, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: cellTest.contentView.superview!, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 0)

    let trailingConstraint = NSLayoutConstraint(item: cellTest.contentView, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: cellTest.contentView.superview!, attribute: NSLayoutAttribute.Trailing, multiplier: 1, constant: 0)

    let topConstraint = NSLayoutConstraint(item: cellTest.contentView, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: cellTest.contentView.superview!, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: 0)

    let leadingConstraint = NSLayoutConstraint(item: cellTest.contentView, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: cellTest.contentView.superview!, attribute: NSLayoutAttribute.Leading, multiplier: 1, constant: 0)

    cellTest.addConstraints([bottomConstraint, trailingConstraint, topConstraint, leadingConstraint])


    let constraintWidth = NSLayoutConstraint(item: vw, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 200)
    constraintWidth.priority = 1000

    let constraintHeight = NSLayoutConstraint(item: vw, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 80)
    constraintHeight.priority = 1000

    let constraintCentreX = NSLayoutConstraint(item: vw, attribute: .CenterX, relatedBy: .Equal, toItem: vw.superview!, attribute: .CenterX, multiplier: 1, constant: 0)
    constraintCentreX.priority = 1000

    let constraintCentreY = NSLayoutConstraint(item: vw, attribute: .CenterY, relatedBy: .Equal, toItem: vw.superview!, attribute: .CenterY, multiplier: 1, constant: 0)
    constraintCentreY.priority = 1000

    cellTest.contentView.addConstraints([constraintWidth, constraintHeight, constraintCentreX, constraintCentreY ])

}