UIView在调整约束和动画后消失
问题描述:
我有一个UITextField
(searchField)在我的viewcontroller的中心,我正在通过使用UIView
(liveView)创建一条细线。我以编程方式创建lineView及其约束。 lineView本质上是一个下划线,随着用户的输入,该下划线在textField下宽度增长。一旦用户按下回车键,我正在调整约束,以便文本框和视图移动到视图控制器的顶部。我得到了这个工作,但随着lineView向上移动,它开始淡出并消失。不知道为什么会发生这种情况。UIView在调整约束和动画后消失
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
})
}
当我检出视图层次结构时,无法找到视图。
答
经过大量调试之后,我决定增加视图的大小以更好地了解发生了什么。很明显,高度正在缩小。我所要做的就是设置一个高度限制,并且一切正常。
let heightConstraint = NSLayoutConstraint(item: lineView!, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: (lineView?.frame.size.height)!)
FWIW,我只是将'lineView'的'leading'和'trailing'边缘约束到文本字段的边缘,并约束'lineView'的高度。现在,无论它如何动画,它都将保持与文本字段同步。 – NRitH