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.