Question: I created a UIView programatically and add NSLayoutConstraint to it and it works and then add it as a subView of view controller's view. Right now I need to remove this view from superview and some time later add it again. But the layout won't work any more if I add it again using `self.view addSubview`. How to make the layout works again?

Answer: 
You need to take care of some points while adding and removing views from auto layout.

There are two methods available in `UIView.h` class

```
// Allows you to perform layout before the drawing cycle happens. 
//   -layoutIfNeeded forces layout early
- (void)setNeedsLayout;
- (void)layoutIfNeeded;

```

Use these methods as per your requirement. So i suggest when ever you remove subview from view, Update constraint of superior view if it is required. And then call below method to reflect layout changes.

```
[self.view layoutIfNeeded];

```

Most cases above method will solve all layout related issues. However some time if complex structure is there i mean runtime changing behaviour of views. 

Then override below method in your `UIViewController`, Perform all frame related changes in this method.

```
- (void)viewDidLayoutSubviews

```
When you create constraints assign it to variables 

```
@property (nonatomic, strong)NSLayoutConstraint *viewConstraintTop;
self.viewConstraintTop = [Your Constraint];

```

When you want to remove it from the superview remove the constraints

```
[self.viewConstraintTop autoRemove];

```

Remove your view and again while adding assign the constraint as 

```
self.viewConstraintTop = [Your Constraint];

```