我试图同时为同一视图设置2个约束(确定y轴和高度的位置)。问题是,他们是依赖的,我的意思是,他们共同努力确定同一财产。图为我的意思。
2箭头描绘了约束。上部设置上部视图和底部视图之间的距离,底部约束设置底部布局指南和底部视图之间的距离。底部视图从视图下方滑动,并停在您当前看到的位置。高度通过动画约束设置。这是我用来制作动画的代码:
self.toBottomConstraint.constant = 53
self.toUpperConstraint.constant = 15
UIView.animateWithDuration(0.2, delay: 0, usingSpringWithDamping: 20, initialSpringVelocity: 20, options: UIViewAnimationOptions.CurveLinear, animations: {
self.view.layoutIfNeeded()
}, completion: {_ in})
代码确实有效,但我收到错误。
无法同时满足约束条件。
可能至少以下列表中的一个约束是您不想要的约束。试试这个:(1)看看每个约束,并试着找出你不期望的东西; (2)找到添加了不需要的约束或约束的代码并修复它。 (注意:如果您看到NSAutoresizingMaskLayoutConstraints
您不明白,请参阅UIView
属性translatesAutoresizingMaskIntoConstraints
的文档...
....
....
....
那么我应该如何设置2个相关约束的动画?
编辑://上限约束。
//底部视图约束。 BuyButton和集合视图嵌套在底部视图中
答案 0 :(得分:4)
根据你动画的构图方式,在动画之前和之后设置约束的方式无限。最重要的是,您需要在动画之前确定约束是什么,以及在动画之后它们将是什么。例如:
self.toBottomConstraint.constant = 153
self.toUpperConstraint.constant = 0
UIView.animateWithDuration(0.2, delay: 0.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { () -> Void in
self.toBottomConstraint.constant = 53
self.toUpperConstraint.constant = 15
self.view.layoutIfNeeded()
}, completion: nil)
上面的代码将自下而上为底部视图设置动画。
顺便说一下,冲突限制的控制台警告消息可能是由您在底视图上设置的其他约束引起的,除了它的顶部和底部约束之外,例如,您可能已为底部视图配置了高度约束,在这种情况下,您需要在动画后更新高度约束。
答案 1 :(得分:2)
您几乎就在那里,只需将常量更改为闭包并提前调用layoutIfNeeded()
:
self.layoutIfNeeded()
UIView.animateWithDuration(0.2, delay: 0, usingSpringWithDamping: 20, initialSpringVelocity: 20, options: UIViewAnimationOptions.CurveLinear, animations: {
self.toBottomConstraint.constant = 53
self.toUpperConstraint.constant = 15
self.view.layoutIfNeeded()
}, completion: {_ in})
中详细了解动画限制