2017-10-15 2 views
1

Ich dachte, ich dies richtig tat, addItemButton Zugabe vor dem self.view versuchen, die Einschränkungen zu aktivieren, aber es wird diesen Fehler werfen:Programmatische Einschränkungen

‚kann nicht Einschränkung mit Ankern aktivieren und weil sie keine gemeinsamen Vorfahr. Verweist die Einschränkung oder ihre Anker auf Elemente in verschiedenen Ansichtshierarchien? Das ist illegal.

var addItemButton: UIButton{ 
    let button = UIButton() 
    let dim: CGFloat = 64.0 

    button.frame = CGRect(x: 0, y: 0, width: dim, height: dim) 
    button.tintColor = Constants.color4 
    button.layer.cornerRadius = dim/2 
    button.layer.masksToBounds = true 

    button.translatesAutoresizingMaskIntoConstraints = false 

    return button 
} 

extension MainViewController{ 
func setupView(){ 
    view.addSubview(itemsCollectionView) 

    view.addSubview(addItemButton) 
    addItemButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true 
    addItemButton.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true 
} 
} 

Ich dachte, view.addSubView (addItemButton) würde die erforderliche Hierarchie erstellen.

Antwort

3

var addItemButton: UIButton { ist eine berechnete Variable. Jedesmal, wenn man auf sie zugreifen, eine neue Schaltfläche Instanz erzeugt daher in

view.addSubview(addItemButton) 
addItemButton.centerXAnchor. ... 

Die addItemButton in jeder Zeile ist ein neues Objekt. Eine Schaltfläche wird erstellt, und Sie versuchen, einer völlig anderen Schaltfläche Einschränkungen hinzuzufügen.

lazy var addItemButton: UIButton = { 
    let button = UIButton() 
    let dim: CGFloat = 64.0 

    button.frame = CGRect(x: 0, y: 0, width: dim, height: dim) 
    button.tintColor = Constants.color4 
    button.layer.cornerRadius = dim/2 
    button.layer.masksToBounds = true 

    button.translatesAutoresizingMaskIntoConstraints = false 
    return button 
}() 
+0

wertvolle Lektion gelernt, danke:

Sie sollten die Variable auf einen lazy ein, aus einem Verschluss initialisiert konvertieren. – Latcie

Verwandte Themen