2016-04-29 9 views
0

Wenn ich NSLayoutConstraint zu einer Ansicht hinzufüge, wird die Ansicht ausgeblendet.Nach dem Hinzufügen einer NSLayoutConstraint verschwindet die Ansicht.

Ich verwende den folgenden Code ein:

let test:UIView = UIView(frame: CGRectMake(0, 0, 100, 100)) 
test.backgroundColor = UIColor.blackColor() 
self.view.addSubview(test) 
test.translatesAutoresizingMaskIntoConstraints = false 
let topCKCtr = NSLayoutConstraint(item: test, attribute: .CenterX, relatedBy: .Equal, toItem: test.superview, attribute: .CenterX, multiplier: 0.5, constant: 0) 
topCKCtr.active = true 

let topCKCtr1 = NSLayoutConstraint(item: test, attribute: .CenterY, relatedBy: .Equal, toItem: test.superview, attribute: .CenterY, multiplier: 0.5, constant: 0) 
topCKCtr1.active = true 


self.view.layoutIfNeeded() 
self.view.setNeedsDisplay() 

Wenn ich Ansicht Hierarchie debuggen, ich sehe, dass die Ansicht besteht, auch wenn sie nicht sichtbar ist. Sehen Sie den folgenden Screenshot für Details - nur die Einschränkung ist sichtbar, nicht die Ansicht: enter image description here

+0

Sobald Sie Einschränkungen beginnen, müssen Sie alles definieren. Der Rahmen wird nicht mehr verwendet. Fügen Sie daher Einschränkungen für Breite und Höhe hinzu. – vacawama

Antwort

1

Es gibt so viele Dinge, die hier besprochen werden müssen.

  1. Wenn Sie die folgenden

    test.translatesAutoresizingMaskIntoConstraints = false 
    

    Dann nutzen wird es voll und ganz auf Einschränkungen verlassen, um eine view.So Sie auf Position und Größe müssen Höhe und Breite Einschränkungen der Ansicht einzustellen.

    let topCKCtr2 = NSLayoutConstraint(item: test, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .Width, multiplier: 1.0, constant: 100) 
    
    let topCKCtr3 = NSLayoutConstraint(item: test, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .Height, multiplier: 1.0, constant: 100) 
    

Schließlich wird dies der Code sein, der Sie suchen

  let test:UIView = UIView(frame: CGRectMake(0, 0, 100, 100)) 
    test.backgroundColor = UIColor.blackColor() 
    self.view.addSubview(test) 
    test.translatesAutoresizingMaskIntoConstraints = false 
    let topCKCtr = NSLayoutConstraint(item: test, attribute: .CenterX, relatedBy: .Equal, toItem: self.view, attribute: .CenterX, multiplier: 0.5, constant: 0) 
    topCKCtr.active = true 
    let topCKCtr1 = NSLayoutConstraint(item: test, attribute: .CenterY, relatedBy: .Equal, toItem: self.view, attribute: .CenterY, multiplier: 0.5, constant: 0) 
    topCKCtr1.active = true 

    let topCKCtr2 = NSLayoutConstraint(item: test, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .Width, multiplier: 1.0, constant: 100) 
    topCKCtr2.active = true 

    let topCKCtr3 = NSLayoutConstraint(item: test, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .Height, multiplier: 1.0, constant: 100) 
    topCKCtr3.active = true 
+1

Sie müssen die Einschränkungen nicht zur Ansicht hinzufügen. Wenn Sie die Eigenschaft 'active' auf' true' setzen, werden die Einschränkungen aktiviert, und 'iOS' sorgt dafür, dass sie den richtigen Ansichten hinzugefügt werden. – vacawama

+0

Sie haben Recht, obwohl ich das Stück Code hinzugefügt habe, habe ich diesen aktiven Teil nicht bemerkt. – SunilG

+1

Tatsächlich können Sie alle Einschränkungen in einem einzigen Aufruf von 'NSLayoutConstraint.activateConstraints (_ :)' aktivieren, und in der Dokumentation von 'NSView.addConstraint (_ :)' wird empfohlen, 'addConstraint 'nicht mehr zu verwenden. Sie erhalten mehr Upvotes, wenn Sie Ihre Antwort bearbeiten, um die veralteten Aufrufe zu entfernen. –