2017-06-21 1 views
0

Ich habe eine UITextField (searchField) in der Mitte meiner Viewcontroller und ich erstellen eine dünne Linie mit UIView (LiveView). Ich erstelle die Zeilenansicht und ihre Einschränkungen programmgesteuert. Die Zeilenansicht ist im Wesentlichen eine Unterstreichung, die in der Breite unterhalb des Textfelds wächst, während der Benutzer tippt. Sobald der Benutzer die Eingabetaste drückt, passe ich die Einschränkungen an, sodass das Textfeld und die Ansicht an den Anfang des Viewcontrollers verschoben werden. Ich habe das funktioniert, aber als die LineView nach oben bewegt, beginnt es zu verblassen und verschwindet. Keine Ahnung, warum das passiert.UIView verschwindet nach dem Anpassen der Abhängigkeit und animieren

func moveUp(){ 

    verticalConstraint = NSLayoutConstraint(item: lineView!, attribute: NSLayoutAttribute.top, relatedBy: NSLayoutRelation.equal, toItem: searchField, attribute: NSLayoutAttribute.bottom, multiplier: 1, constant: 6) 

    lineView!.translatesAutoresizingMaskIntoConstraints = false 

    let xConstraint = NSLayoutConstraint(item: lineView!, attribute: .centerX, relatedBy: .equal, toItem: searchField, attribute: .centerX, multiplier: 1, constant: 0) 

    let widthConstraint = NSLayoutConstraint(item: lineView!, attribute: NSLayoutAttribute.width, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: (lineView?.frame.size.width)!) 

    view.addConstraints([verticalConstraint!, xConstraint, widthConstraint]) 

    searchBarTopConstraint.constant = 0 

    UIView.animate(withDuration: 2.00, delay: 0.0, options: [], animations: { 

     self.view.layoutIfNeeded() 

    }, completion: { (finished: Bool) in 


    }) 

} 

Wenn ich die Ansichtshierarchie auschecke, ist die Ansicht nirgendwo zu finden.

Antwort

0

Nach vielen Debugging habe ich beschlossen, die Größe der Ansicht zu vergrößern, um eine bessere Vorstellung von dem zu bekommen, was vor sich ging. Es wurde klar, dass die Höhe schrumpfte. Alles, was ich tun musste, war eine Höhenbeschränkung und alles hat funktioniert.

let heightConstraint = NSLayoutConstraint(item: lineView!, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: (lineView?.frame.size.height)!) 
+0

FWIW, ich würde nur die "führenden" und "abschließenden" Kanten des 'lineView' an die Kanten des Textfelds beschränken und die Höhe des' lineView' einschränken. Jetzt bleibt es synchron zum Textfeld, egal wie animiert es ist. – NRitH

Verwandte Themen