dusker
dusker

Reputation: 846

Autolayout issues when adding a new view into a hierarchy

I'm struggling big time with a couple of scenarios when i have a UIView with constraints applied via IB and adding a new UIView into it's view hierarchy. Here's how it goes:

I have a full screen UITableView with the following constraints applied so it scales nicely through all the resolutions of iOS devices:

enter image description here

Now i'd like to add a UIView above the UITableView acting as a sort-of toolbar.

Right now the only possible way i succeeded in adding this view is adding it on top of the TableView, so that it covers the top of tableview. What i'd like to achieve is the newly added UIView pushing table down so both are visible. I tried several things including adding a container view in IB just above the tableview however that didn't work at all.

So my question is: is there a way to dynamically edit, remove and add new constraints to the view hierarchy, ideally supporting animation?

Upvotes: 2

Views: 140

Answers (1)

Tiago Lira
Tiago Lira

Reputation: 2550

You can create IBOutlets for a constraint, just like any view. Each NSLayoutConstraint object has a constant property that you can set anytime in code (it's the value of the constraint).

So you would create both views on Interface Builder, and constraint the top of the table view to the bottom of the new view. The new view will have a set height constraint, and you create an outlet to that height constraint to make that view appear or disappear in code. There are other possible solutions but I think this one is the easiest.

The code would be something like this:

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *topHeightConstraint;

To set the value:

self.topHeightConstraint.constant = 60;

and to animate it:

[UIView animateWithDuration:0.6 animations:^{
            self.topHeightConstraint.constant = 60;
            [self.view layoutIfNeeded];
}];

Upvotes: 1

Related Questions