我有使视图动画化的代码(更改约束)
UIView .animate(withDuration: TimeInterval(duration), delay: 0.0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseInOut, animations: {
self.topConstraint!.constant = self.yPositioOfOpenPanel
self.superview?.layoutIfNeeded()
}
奇怪的行为是在iPhone X
layoutSubviews
上被调用,但在其他模拟器和真实设备上没有被调用。 (我认为应该是)相同的行为是当我手动更改约束时
if let constraint = topConstraint {
constraint.constant = self.superview!.frame.height - recogniser.location(in: self.superview).y + yPositionOfBeginTouchInPanel
}
编辑:
按照建议,我要添加一些新信息。
动画效果非常好,所有内容都可以制作动画。
问题是我想在动画到位的同时触发一些新事件。 (我将使用topConstraint.constant在动画到位时或手动更改topConstraint时计算一些内容),这就是为什么我想在方法
layoutSubviews
上设置一些触发器的原因。动画更改子视图时应触发此方法。我认为这可以在iOS 11之前运行(但我不能100%肯定,因为该功能是我程序中的新增功能,但是我记得我在其他程序中使用了此功能,但它确实起作用了)。它仍然适用于iPhone X(模拟器),但不适用于其他模拟器或真实设备(显然,真正的iPhone X尚未推出)。
最佳答案
我认为您应该稍微更改动画代码:
// update constraints before you call animate
self.topConstraint!.constant = self.yPositioOfOpenPanel
// tell superview that the layout will need to be updated
self.superview?.setNeedsLayout()
UIView.animate(withDuration: TimeInterval(duration), delay: 0.0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseInOut, animations: {
// here you tell it to update the layout according to new constraints
self.superview?.layoutIfNeeded()
}
关于ios - 在新的xcode layoutSubviews中不被调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46826208/