Here is a little but very useful snippet:
NSDictionary *views = NSDictionaryOfVariableBindings(redView, blueView);
What?!
Working with auto layout in code may be painful. Especially if you’re trying to setup the constraints for more than a few views.
Here is an example that creates auto layout constraints, using visual format language, for two views to have a fixed vertical spaces both between each other and super view:
NSArray *constraints = [NSLayoutConstraint
constraintsWithVisualFormat:
@"V:|-[redView(==blueView)]-0-[blueView]-|"
options:0
metrics:nil
views:@{@"redView": redView, @"blueView": blueView}];
[self.view addConstraints:constraints];
In this one liner(!), we need to provide our views in a dictionary with the keys being the same as the visual format and the values being our views.
This is very open for typos. And if that’s the case, you may need some time to spend on debugging.
But in a relatively shorter way
Instead if we use variable bindings, it will create the same dictionary for us, using the variable names as keys and variables themselves as values. Also it’s easy on the eye too!
NSDictionaryOfVariableBindings(redView, blueView)
So you can have a full setup like:
NSDictionary *views = NSDictionaryOfVariableBindings(redView, blueView);
NSArray *constraints = [NSLayoutConstraint
constraintsWithVisualFormat:
@"V:|-[redView(==blueView)]-0-[blueView]-|"
options:0
metrics:nil
views:views];
[self.view addConstraints:constraints];
constraints = [NSLayoutConstraint
constraintsWithVisualFormat:
@"H:|-[redView]-|"
options:0
metrics:nil
views:views];
[self.view addConstraints:constraints];
constraints = [NSLayoutConstraint
constraintsWithVisualFormat:
@"H:|-[blueView]-|"
options:0
metrics:nil
views:views];
[self.view addConstraints:constraints];
Let me know if that made your day! :)