Maria
Maria

Reputation: 765

iOS Auto Layout issue

I'm trying to make constraints programmatically. I have textField and button created in IB. Here is the code:

UIView *superview = self.view;

self.button.translatesAutoresizingMaskIntoConstraints = NO;
self.textField.translatesAutoresizingMaskIntoConstraints = NO;

NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:self.textField
                                                              attribute:NSLayoutAttributeCenterY
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:superview
                                                              attribute:NSLayoutAttributeCenterY
                                                             multiplier:1.0f
                                                                constant:0];
[superview addConstraint:constraint];

constraint = [NSLayoutConstraint constraintWithItem:self.textField
                                          attribute:NSLayoutAttributeCenterX
                                          relatedBy:NSLayoutRelationEqual
                                             toItem:superview
                                          attribute:NSLayoutAttributeCenterX
                                         multiplier:1.0f
                                           constant:0];
[superview addConstraint:constraint];

constraint =[NSLayoutConstraint constraintWithItem:self.button
                                           attribute:NSLayoutAttributeTrailing
                                           relatedBy:NSLayoutRelationEqual
                                              toItem:self.textField
                                           attribute:NSLayoutAttributeLeading
                                          multiplier:1
                                            constant:-10];

[superview addConstraint:constraint];

constraint =[NSLayoutConstraint constraintWithItem:self.button
                                           attribute:NSLayoutAttributeBaseline
                                           relatedBy:NSLayoutRelationEqual
                                              toItem:self.textField
                                           attribute:NSLayoutAttributeBaseline
                                          multiplier:1
                                            constant:0];

[superview addConstraint:constraint];

And after running I have this issue: enter image description here Constraints also have no effect on views. What am I doing wrong?

Upvotes: 0

Views: 611

Answers (2)

Andrea
Andrea

Reputation: 26383

First in the storyboard editor select the view controller you want to change then, in the constraint editor, select "ADD missing constraints in view controller" enter image description here Select an elment that you'd like to modify at runtime by remomiving and adding new constraint, in the object inspector panel select each constraints and edit it by checking the box "placeholder: remove at build time".

enter image description here

This is a way to say to storyboard editor that you are fine with the constraint ant it should not apply or complain about an insufficient constraints situation. Constraints flagged are removed at runtime, so you should provide you own constraint and is better if you do in the right place. Ovverride -updateViewConstraints in the view controller and remember to call super and add you new constraints.

Upvotes: 2

Marius Waldal
Marius Waldal

Reputation: 9952

You have three auto-generated constraints "IB auto generated at build time for view with fixed frame". These conflict with the ones you make yourself. Probably, you have set fixed size properties on the text field and button in Interface Builder. Possibly, you have a fixed width on your button, and that conflicts with the trailing constraint.

Combining IB with code constraints can be tricky. I have found it is often easier to design things only in IB or only in code to avoid conflicts like these, although combining the two is perfectly viable.

For a good explanation on what NSIBPrototypingLayoutConstraint is, have a look at this SO answer: Trouble with AutoLayout on UITableViewCell

Upvotes: 0

Related Questions