Update für Swift 3 / Swift 4:
Ab iOS 8 können und sollten Sie Ihre Einschränkungen aktivieren, indem Sie deren isActiveEigenschaft auf festlegen true. Dadurch können sich die Einschränkungen den richtigen Ansichten hinzufügen. Sie können mehrere Einschränkungen gleichzeitig aktivieren, indem Sie ein Array mit den Einschränkungen an übergebenNSLayoutConstraint.activate()
let label = UILabel(frame: CGRect.zero)
label.text = "Nothing to show"
label.textAlignment = .center
label.backgroundColor = .red // Set background color to see if label is centered
label.translatesAutoresizingMaskIntoConstraints = false
self.tableView.addSubview(label)
let widthConstraint = NSLayoutConstraint(item: label, attribute: .width, relatedBy: .equal,
toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: 250)
let heightConstraint = NSLayoutConstraint(item: label, attribute: .height, relatedBy: .equal,
toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: 100)
let xConstraint = NSLayoutConstraint(item: label, attribute: .centerX, relatedBy: .equal, toItem: self.tableView, attribute: .centerX, multiplier: 1, constant: 0)
let yConstraint = NSLayoutConstraint(item: label, attribute: .centerY, relatedBy: .equal, toItem: self.tableView, attribute: .centerY, multiplier: 1, constant: 0)
NSLayoutConstraint.activate([widthConstraint, heightConstraint, xConstraint, yConstraint])
Bessere Lösung:
Da diese Frage ursprünglich beantwortet wurde, wurden Layoutanker eingeführt, die das Erstellen der Einschränkungen erheblich vereinfachen. In diesem Beispiel erstelle ich die Einschränkungen und aktiviere sie sofort:
label.widthAnchor.constraint(equalToConstant: 250).isActive = true
label.heightAnchor.constraint(equalToConstant: 100).isActive = true
label.centerXAnchor.constraint(equalTo: self.tableView.centerXAnchor).isActive = true
label.centerYAnchor.constraint(equalTo: self.tableView.centerYAnchor).isActive = true
oder das gleiche mit NSLayoutConstraint.activate():
NSLayoutConstraint.activate([
label.widthAnchor.constraint(equalToConstant: 250),
label.heightAnchor.constraint(equalToConstant: 100),
label.centerXAnchor.constraint(equalTo: self.tableView.centerXAnchor),
label.centerYAnchor.constraint(equalTo: self.tableView.centerYAnchor)
])
Hinweis: Fügen Sie Ihre Unteransichten immer zur Ansichtshierarchie hinzu, bevor Sie die Einschränkungen erstellen und aktivieren.
Ursprüngliche Antwort:
Die Einschränkungen beziehen sich auf self.tableView. Da Sie die Bezeichnung als Unteransicht von hinzufügen self.tableView, müssen die Einschränkungen dem "gemeinsamen Vorfahren" hinzugefügt werden:
self.tableView.addConstraint(xConstraint)
self.tableView.addConstraint(yConstraint)
Wie @mustafa und @kcstricks in den Kommentaren betonten, müssen Sie festlegen label.translatesAutoresizingMaskIntoConstraints, dass false. Wenn Sie dies tun, müssen Sie auch das widthund heightdes Etiketts mit Einschränkungen angeben , da der Rahmen nicht mehr verwendet wird. Schließlich sollten Sie auch festlegen textAlignment, .Centerdass Ihr Text in Ihrer Beschriftung zentriert ist.
var label = UILabel(frame: CGRectZero)
label.text = "Nothing to show"
label.textAlignment = .Center
label.backgroundColor = UIColor.redColor() // Set background color to see if label is centered
label.translatesAutoresizingMaskIntoConstraints = false
self.tableView.addSubview(label)
let widthConstraint = NSLayoutConstraint(item: label, attribute: .Width, relatedBy: .Equal,
toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 250)
label.addConstraint(widthConstraint)
let heightConstraint = NSLayoutConstraint(item: label, attribute: .Height, relatedBy: .Equal,
toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 100)
label.addConstraint(heightConstraint)
let xConstraint = NSLayoutConstraint(item: label, attribute: .CenterX, relatedBy: .Equal, toItem: self.tableView, attribute: .CenterX, multiplier: 1, constant: 0)
let yConstraint = NSLayoutConstraint(item: label, attribute: .CenterY, relatedBy: .Equal, toItem: self.tableView, attribute: .CenterY, multiplier: 1, constant: 0)
self.tableView.addConstraint(xConstraint)
self.tableView.addConstraint(yConstraint)