I know that the auto layout chain consists in basically 3 different process.

1. updating constraints
2. layout views (here is where we get calculation of frames)
3. display

What's is not totally clear to me is the inner difference between `-setNeedsLayout` and `-setNeedsUpdateConstraints`. From Apple Docs:  

[**setNeedsLayout**](https://developer.apple.com/reference/uikit/uiview/1622601-setneedslayout)

> 
> Call this method on your application’s main thread when you want to
>  adjust the layout of a view’s subviews. This method makes a note of
>  the request and returns immediately. Because this method does not
>  force an immediate update, but instead waits for the next update
>  cycle, you can use it to invalidate the layout of multiple views
>  before any of those views are updated. This behavior allows you to
>  consolidate all of your layout updates to one update cycle, which is
>  usually better for performance.
>    
> 
> 
> 
> 

[**setNeedsUpdateConstraints**](https://developer.apple.com/reference/uikit/uiview/1622450-setneedsupdateconstraints)

> 
> When a property of your custom view changes in a way that would impact
>  constraints, you can call this method to indicate that the constraints
>  need to be updated at some point in the future. The system will then
>  call updateConstraints as part of its normal layout pass. Updating
>  constraints all at once just before they are needed ensures that you
>  don’t needlessly recalculate constraints when multiple changes are
>  made to your view in between layout passes.
> 
> 
> 

When I want to animate a view after modifying a constraint and animate the changes I usually call for instance:

```
[UIView animateWithDuration:1.0f delay:0.0f usingSpringWithDamping:0.5f initialSpringVelocity:1 options:UIViewAnimationOptionCurveEaseInOut animations:^{
        [self.modifConstrView setNeedsUpdateConstraints];
        [self.modifConstrView layoutIfNeeded];
    } completion:NULL];

```

I've found out that if I use `-setNeedsLayout` instead of `-setNeedsUpdateConstraints` everything work as expected, but if I change `-layoutIfNeeded` with `-updateConstraintsIfNeeded`, the animation won't happen.  

I've tried to make my own conclusion:

* `-updateConstraintsIfNeeded` only update constraints but doesn't force the layout to come into the process, thus original frames are still preserved
* `-setNeedsLayout` calls also `-updateContraints` method

So when is ok to use one instead of the other? and about the layout methods, do I need to call them on the view that has a change in a constraint or on the parent view?