Adding and removing subviews is the best way to achieve this. But if you do this with storyboard, all the overlapping views could look messy and will be hard to manage.
The best way to achieve this is adding views programmatically, and also setting layout constraints programatically.
UIView *subView = [[UIView alloc]init];
subView.backgroundColor = [UIColor blackColor];
NSDictionary *viewsDictionary = @{@"subView":subView};
NSDictionary *metrics = @{@"offset":@20};
NSArray *heightConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-offset-[subView]-offset-|"
                                                                    options:0
                                                                    metrics:metrics
                                                                      views:viewsDictionary];
NSArray *widthConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-offset-[subView]-offset-|"
                                                                   options:0
                                                                   metrics:metrics
                                                                     views:viewsDictionary];
[self.view addConstraints:heightConstraint];
[self.view addConstraints:widthConstraint];
The code above for example will add the subview whish has top,bottom,leading and trailing space set to 20 from the main view of the view controller.