下面是我用来移动和缩小标签的代码。它工作正常,直到我把它变成一个扩展。现在属性动画但不是约束。我已经多次看过同样的问题,但解决方案看起来都非常简单,没有一个正在运作。我已经尝试移动约束常量以及动画上方的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)
}
}
因为你的说法“我用来移动和缩小标签”我怀疑你的问题是因为你在标签本身上调用self.layoutIfNeeded()
,这将更新当前视图范围内的约束,但是移动视图需要superview来布局作为测试,您还可以在动画块中包含self.superview?.layoutIfNeeded()
,但如果您想确定,请将标签的superview传递给该函数并在其上调用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)
}
}
附:在你的代码中,你实际上没有动画约束,这是你的意图吗?