Update für Swift 3 / Swift 4:
Ab iOS 8 können und sollten Sie Ihre Einschränkungen aktivieren, indem Sie deren isActive
Eigenschaft 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 width
und height
des Etiketts mit Einschränkungen angeben , da der Rahmen nicht mehr verwendet wird. Schließlich sollten Sie auch festlegen textAlignment
, .Center
dass 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)