我正在交换一个UIView用于另一个 - 删除一个并添加另一个,这工作正常。我想为转换设置动画,这应该很简单,但问题是我需要在我添加的视图上添加布局约束。 (对添加的视图的约束与我正在删除的视图的约束不同。)
我不是试图为约束的变化设置动画。它们需要就位,以便以正确的尺寸显示视图,正确的尺寸会根据屏幕尺寸而变化。
在动画块中设置新约束显然会崩溃,因为尚未设置视图层次结构。在完成块中设置它们太晚了 - 它们被添加了,但新视图出错并且没有正确地使用新约束布局,直到下次更新视图时,这会导致布局“跳”到错了。
UIView.transition(with: containerView,
duration: 0.3,
options: .transitionCrossDissolve,
animations: {
self.containerView.addSubview(targetView)
self.currentView.removeFromSuperview()
}, completion: { _ in
self.currentView = targetView
self.setupConstraints()
})
有办法解决这个问题吗?我觉得我错过了一些东西,但我在文档中找不到它。
答案 0 :(得分:2)
您可以在开始时设置所有视图和约束(例如,为targetView设置alpha = 0),然后只是动画视图的alpha和约束,在所有动画完成时删除不必要的视图。