下面是我用来移动和缩小标签的代码。直到我将其转换为扩展程序,它的工作情况都很好。现在,这些属性可以设置动画,但不能设置约束。我已经多次问过同样的问题,但是解决方案似乎都非常简单,而且都无法正常工作。我试过将约束常量以及layoutIfNeeded
()移到动画上方,alpha设置下方,上方和下方...没有运气。
extension UIView {
func moveLabel(lc: NSLayoutConstraint, hc: NSLayoutConstraint) {
lc.constant = -1
hc.constant = 24
UIView.animate(withDuration: 0.5, delay: 0, options: [.curveEaseInOut], animations: {
self.transform = CGAffineTransform(scaleX: 0.7, y: 0.7)
self.alpha = 0.5
self.layoutIfNeeded()
}, completion: nil)
}
}
答案 0 :(得分:0)
因为您所说的“我用来移动和缩小标签”,我怀疑您的问题是由于您在标签本身上调用self.layoutIfNeeded()
会导致在当前视图范围内更新约束,但是移动视图需要布置超级视图。作为测试,您还可以在动画块中包含self.superview?.layoutIfNeeded()
,但是,如果您想确定的话,请将标签的监督传递给该函数,然后在该函数上调用layoutIfNeeded()
。
extension UIView {
func moveLabel(lc: NSLayoutConstraint, hc: NSLayoutConstraint, superView: UIView) {
lc.constant = -1
hc.constant = 24
UIView.animate(withDuration: 0.5, delay: 0, options: [.curveEaseInOut], animations: {
self.transform = CGAffineTransform(scaleX: 0.7, y: 0.7)
self.alpha = 0.5
self.layoutIfNeeded()
superView.layoutIfNeeded()
}, completion: nil)
}
}
p.s。在您的代码中,您实际上不是在动画约束,这是您的意图吗?