Update für Swift 3/Swift 4:
Ab iOS 8, können und sollten Sie Ihre Einschränkungen aktivieren, indem ihre isActive
Eigenschaft auf true
Einstellung. Dadurch können sich die Abhängigkeiten zu den richtigen Ansichten hinzufügen. Sie können mehrere Einschränkungen aktivieren, indem ein Array vorbei an den Zwängen NSLayoutConstraint.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 enthält:
Da diese Frage wurde ursprünglich beantwortet, Layout Anker eingeführt wurden so dass es viel einfacher, das schaffen Einschränkungen. In diesem Beispiel erstelle ich die Zwänge und sofort aktivieren sie:
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
Hinweis: Immer dein Subviews der Ansicht Hierarchie fügen vor das Erstellen und die Einschränkungen zu aktivieren.
Ursprüngliche Antwort:
Die Einschränkungen Bezug auf self.tableView
machen. Da Sie das Label als Subview self.tableView
hinzufügen, müssen die Einschränkungen auf den „gemeinsamen Vorfahren“ hinzugefügt werden:
self.tableView.addConstraint(xConstraint)
self.tableView.addConstraint(yConstraint)
Als @mustafa und @kcstricks in den Kommentaren darauf hingewiesen, müssen Sie Set label.translatesAutoresizingMaskIntoConstraints
zu false
. Wenn Sie dies tun, müssen Sie auch die width
und height
der Beschriftung mit Einschränkungen angeben, da der Rahmen nicht mehr verwendet wird. Schließlich sollten Sie auch textAlignment
auf .Center
setzen, damit Ihr Text in Ihrem Etikett 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)
Ich erstelle dies in VIEWDIDLOAD. –
Ich sehe die Zeile nicht, in der Sie das Label als Unteransicht zu einer anderen Ansicht hinzufügen. Es ist wichtig, dass Sie das tun, bevor Sie Einschränkungen hinzufügen. –
Ich bin: Label = UILabel (Frame: CGRectMake (20, 20, 250, 100)) label.text = "Nichts zu zeigen" self.tableView.addSubview (Label) –