以编程方式添加到UITableViewCell

时间:2016-03-02 10:01:43

标签: ios nslayoutconstraint

我正在尝试重现此屏幕截图中的约束,这些约束应用于静态UITableViewCell:

enter image description here

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

@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 ])
}

但是,下面是意外输出,视图位于左上角而不是居中。我非常感谢任何帮助,因为我花了很长时间试图解决这个问题:

enter image description here

1 个答案:

答案 0 :(得分:0)

I needed to add constraints to the cell's contentView, as well. These are added to the cell itself.

Code and screenshot below.

@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 ])

}

enter image description here

相关问题