I can't find a way to create a 'square' constraint, meaning 'width equals height' in Interface Builder. I guess it's possible to add such constraint programmatically. Is there something I can do in IB? Maybe I just don't see it? It seems trivial, yet I can't find it.
-
I remember Peter Ammon talking about "Rely on Interface Builder as much as possible" in WWDC'12. How ironic.DemoniacDeath– DemoniacDeath2013-03-02 23:41:25 +00:00Commented Mar 2, 2013 at 23:41
-
4Yeah, I think there are still a few things missing from the implementation of layout constraints. It seems they've given us access to most of the parameters, but not the multiplier, which would be useful for a lot of things.rdelmar– rdelmar2013-03-03 00:40:41 +00:00Commented Mar 3, 2013 at 0:40
-
But it's getting better and better! I mean Auto Layout was introduced less than 3 years ago and from my point of view the support is really good nowadays.Lukáš Kubánek– Lukáš Kubánek2014-02-10 16:37:00 +00:00Commented Feb 10, 2014 at 16:37
4 Answers
Update Xcode 5.1b5

Ctrl+click and drag from a view and release while the pointer is over the view. Select "Aspect Ratio". It will create a constraint where the first and second item is the view.
Before Xcode 5.1
You can't because the width/height editor lacks the fields to relate to another property or set the ratio:

Therefore, you can't express the following code in Interface Builder:
CGFloat ratio = 1.0;
NSLayoutConstraint *constraint = [NSLayoutConstraint
constraintWithItem:myView
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:myView
attribute:NSLayoutAttributeHeight
multiplier:ratio
constant:0];
constraint.priority = 1000;
[myView.superview addConstraint:constraint];
8 Comments
To start, control drag diagonally from the button to itself. A contextual menu will appear, where you can add width and height constraints. Shift+Click on each; a checkmark will appear indicating that you have added the constraint. (If you accidentally dismiss the dialog before adding both, that’s OK, just repeat the drag step and set the other one):
When first added, these constraints take on the current width and height of the button, so you’ll need to adjust each constraint to give it a more appropriate value. We’ll have to do this one at a time, although our image is square, so be sure to use the same constant value in both constraints to resize the button proportionally. Double-click on the constraint, and enter a smaller value in its constant field:


