I have two states of UIView:

I have animation between them using @IBaction for button:
@IBAction func tapped(sender: UIButton) {
    flag = !flag
    UIView.animateWithDuration(1.0) {
        if self.flag {
            NSLayoutConstraint.activateConstraints([self.myConstraint])
        } else {
            NSLayoutConstraint.deactivateConstraints([self.myConstraint])
        }
        self.view.layoutIfNeeded() //additional line
    }
}
Animation is working only when I add additional line:
But when I remove that line, then my UIView is updated but without any animation, it happens immediately.
Why this line makes such difference? How is it working?