我有一个容器和居中的孩子。
// Center constraint added to container
NSLayoutConstraint(item: childView, attribute: .CenterX, relatedBy: .Equal, toItem: containerView, attribute: .CenterX, multiplier: 1, constant: 0)
// Width constraint added to child
NSLayoutConstraint(item: childView, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: width)
在列出所有观点之后,他们的立场是正确的。但是,当我开始动画更改孩子的宽度时,它会失去居中位置,并在动画结束时逐渐向后移动。
这是我作为子类的一部分开始动画的方法
widthConstraint?.constant = widthNew
UIView.animateWithDuration(2, animations: {
self.superview?.layoutIfNeeded()
}) { (completed: Bool) in
if completed {
print("done")
}
}
在开始设置动画之前,这是初始状态。
这是跳跃发生时失去了它的中心。
但是要完成,它会回到中心。
如何确保它始终居中?
答案 0 :(得分:1)
我做的是:
SelectionCharOffset = FontSize/(2.2)
限制条件是:
这是工作代码,因此您可以尝试在视图之外更改视图约束。然后我们就会遇到问题。
我将此视图用作动画视图,以便了解在视图中设置自己的约束时的效果。
class ViewController: UIViewController {
@IBOutlet weak var widthConstraint: NSLayoutConstraint!
@IBOutlet weak var animatedView: UIView!
override func viewDidLoad()
{
super.viewDidLoad()
}
@IBAction func Btn1(sender: AnyObject) {
widthConstraint?.constant = 20
UIView.animateWithDuration(2, animations: {
self.animatedView?.layoutIfNeeded()
}) { (completed: Bool) in
if completed {
print("done")
}
}
}
}
从其超级视图设置它的widthConstraint并从那里触发动画。这也有效。