为什么这些约束在动画时似乎滞后?

Why do these constraints seem to lag when animated?

我正在使用 UIView.animate 为我的约束设置动画。 drawerHeight 是约束变量。

代码如下:

drawerHeight?.constant = newHeight

UIView.animate(withDuration: 0.35, delay: 0, usingSpringWithDamping: 0.65, initialSpringVelocity: 2, options: .allowUserInteraction, animations: {
    self.superview?.layoutIfNeeded()
})

Here is a video of what the issue looks like.

看视频底部,底部边缘似乎滞后了。 为什么这些约束在动画时似乎滞后?

这是一个自我回答的问题。这个post是为了帮助以后的人发现自己做错了什么,以及如何快速改正。

问题是约束附加到比以前更深的层次结构中的视图。使用 layoutIfNeeded() 时,应在包含约束的视图的父视图上调用它。

在我的情况下,我将具有 drawerHeight 约束的视图放在另一个 UIView 中,这使其在层次结构中更深。

我通过

解决了这个问题

self.superview?.superview?.layoutIfNeeded() ,

而不是

self.superview?.layoutIfNeeded() .