2016-05-11 10 views
4

Ich habe ein seltsames Problem. Ich möchte unter bestimmten Bedingungen eine Einschränkung ändern, aber removeConstraint funktioniert nicht. Die Einschränkung wird nicht entfernt.removeConstraint() funktioniert nicht

Hier ist der Code:

 backButton.translatesAutoresizingMaskIntoConstraints = false 
     view.removeConstraint(constLabelTop) 
     let constNew = NSLayoutConstraint(item: label, attribute: .CenterY, relatedBy: .Equal, toItem: backButton, attribute: .CenterY,multiplier: 1, constant: 0) 
     view.addConstraint(constNew) 

Die Einschränkung constLabelTop ist eine Einschränkung, die die Spitze der label ein paar Punkte über dem backButton setzt. Warum funktioniert es nicht?

Die neue Bedingung kollidiert mit der alten und die backButton wird gequetscht.

Ich versuchte backButton.removeConstraint auch und nicht funktioniert auch nicht.

+0

Anruf layoutIfNeeded nach der endgültigen Einschränkung hinzufügen. –

Antwort

4

Versuchen Sie folgendes:

backButton.translatesAutoresizingMaskIntoConstraints = false 
constLabelTop.active = false 
NSLayoutConstraint(item: label, attribute: .CenterY, relatedBy: .Equal, toItem: backButton, attribute: .CenterY,multiplier: 1, constant: 0).active = true 
self.view.layoutIfNeeded() 
+1

keine Notwendigkeit, 'addConstraint' und' removeConstraint' in 'active = false' oder' active = true' zu ​​ändern, das Ergebnis ist das gleiche und die Absicht ist klar. – Sulthan

+0

Ich kann '.active' nicht verwenden. Die App ist auch mit iOS 7 kompatibel. Aber ich habe die notwendigen Änderungen vorgenommen und es hat funktioniert. Vielen Dank! – Lawrence413

+0

Ja, sie sind einander gleichwertig. Sie können einen von ihnen verwenden. – Khuong