ios add button autolayout - ios

I insert a button to a view in storyboard like following:
and I need to add a custom constrain to the bottom using following code:
- (void)viewDidLoad
{
[super viewDidLoad];
NSDictionary *viewsDictionary = [NSDictionary dictionaryWithObject:self.bottomButton forKey:#"bottomButton"];
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:#"[bottomButton]-90-|" options:0 metrics:nil views:viewsDictionary];
NSArray *v_constraints = [NSLayoutConstraint constraintsWithVisualFormat:#"V:[bottomButton]-20-|" options:0 metrics:nil views:viewsDictionary];
[self.bottomButton.superview addConstraints:constraints];
[self.bottomButton.superview addConstraints:v_constraints];
}
but there's a conflict, the error is
Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSIBPrototypingLayoutConstraint:0x8c57fb0 'IB auto generated at build time for view with fixed frame' H:|-(254)-[UIButton:0x8c56440](LTR) (Names: '|':UIView:0x8c56af0 )>",
"<NSIBPrototypingLayoutConstraint:0x8c58de0 'IB auto generated at build time for view with fixed frame' H:[UIButton:0x8c56440(46)]>",
"<NSLayoutConstraint:0x8c4fc30 H:[UIButton:0x8c56440]-(90)-| (Names: '|':UIView:0x8c56af0 )>",
"<NSAutoresizingMaskLayoutConstraint:0x8c62320 h=--& v=--& H:[UIView:0x8c56af0(320)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x8c4fc30 H:[UIButton:0x8c56440]-(90)-| (Names: '|':UIView:0x8c56af0 )>
Break on objc_exception_throw to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSIBPrototypingLayoutConstraint:0x8c58d30 'IB auto generated at build time for view with fixed frame' V:|-(361)-[UIButton:0x8c56440] (Names: '|':UIView:0x8c56af0 )>",
"<NSIBPrototypingLayoutConstraint:0x8c58e10 'IB auto generated at build time for view with fixed frame' V:[UIButton:0x8c56440(30)]>",
"<NSLayoutConstraint:0x8c527c0 V:[UIButton:0x8c56440]-(20)-| (Names: '|':UIView:0x8c56af0 )>",
"<NSAutoresizingMaskLayoutConstraint:0x8c62380 h=--& v=--& V:[UIView:0x8c56af0(568)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x8c527c0 V:[UIButton:0x8c56440]-(20)-| (Names: '|':UIView:0x8c56af0 )>
Break on objc_exception_throw to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
how to fix it?

It's happening because even though you haven't set constraints explicitly in IB they're automatically added on runtime, e.g.
"<NSIBPrototypingLayoutConstraint:0x8c57fb0 'IB auto generated at build time for view with fixed frame' H:|-(254)-[UIButton:0x8c56440](LTR) (Names: '|':UIView:0x8c56af0 )>",
Please watch the session 406 from WWDC 2013. The current best practice is to set your constraints in IB, and then only modify/add constraints in code which can't be set using IB.

Related

AutoLayout inside of an AutoResizingView

I am trying to create a custom inputView for a UITextView. I have a subclass of a UIView that I am working in, and I'm trying to add UI elements to it. The view itself is set to self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; so that the system will fill the view to the size of what the inputView should be.
I can't seem to get AutoLayout constraints to work inside of this view. No matter how many different things I try, I always have conflicting constraints.
Is it possible to use AutoLayout inside of an autoresizing view?
Here is some sample code of what I'm doing:
UILabel *label = [[UILabel alloc] init];
label.text = #"Test Label";
label.textAlignment = NSTextAlignmentCenter;
[self addSubview:label];
NSArray *labelHorizontalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:#"H:|-8.0-[label]-8.0-|" options:0 metrics:nil views:#{ #"label" : label }];
NSArray *labelVerticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:#"V:|-8.0-[label]" options:0 metrics:nil views:#{ #"label" : label }];
NSMutableArray *constraintsArray = [NSMutableArray array];
[constraintsArray addObjectsFromArray:labelHorizontalConstraints];
[constraintsArray addObjectsFromArray:labelVerticalConstraints];
[self addConstraints:constraintsArray];
And this is the kind of errors that I'm getting:
2015-07-21 05:56:38.804 InputView[880:22401] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x79175910 UIInputSetHostView:0x79175640.width == UIInputSetContainerView:0x79174ff0.width>",
"<NSLayoutConstraint:0x78f8f240 'UIView-Encapsulated-Layout-Width' H:[UIInputSetContainerView:0x79174ff0(768)]>",
"<NSLayoutConstraint:0x7932ffa0 H:|-(8)-[UILabel:0x79364df0'Test Label'] (Names: '|':TestInputView:0x79364f10 )>",
"<NSLayoutConstraint:0x7932d1a0 H:[UILabel:0x79364df0'Test Label']-(8)-| (Names: '|':TestInputView:0x79364f10 )>",
"<NSLayoutConstraint:0x793611b0 TestInputView:0x79364f10.right == UIInputSetHostView:0x79175640.right>",
"<NSLayoutConstraint:0x79361180 H:|-(0)-[TestInputView:0x79364f10](LTR) (Names: '|':UIInputSetHostView:0x79175640 )>",
"<NSAutoresizingMaskLayoutConstraint:0x79362920 h=--& v=--& UILabel:0x79364df0'Test Label'.midX ==>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7932d1a0 H:[UILabel:0x79364df0'Test Label']-(8)-| (Names: '|':TestInputView:0x79364f10 )>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
2015-07-21 05:56:38.805 InputView[880:22401] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x7932ffa0 H:|-(8)-[UILabel:0x79364df0'Test Label'] (Names: '|':TestInputView:0x79364f10 )>",
"<NSAutoresizingMaskLayoutConstraint:0x79362920 h=--& v=--& UILabel:0x79364df0'Test Label'.midX ==>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7932ffa0 H:|-(8)-[UILabel:0x79364df0'Test Label'] (Names: '|':TestInputView:0x79364f10 )>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
2015-07-21 05:56:38.812 InputView[880:22401] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x7932e7e0 V:|-(8)-[UILabel:0x79364df0'Test Label'] (Names: '|':TestInputView:0x79364f10 )>",
"<NSAutoresizingMaskLayoutConstraint:0x79362980 h=--& v=--& UILabel:0x79364df0'Test Label'.midY ==>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7932e7e0 V:|-(8)-[UILabel:0x79364df0'Test Label'] (Names: '|':TestInputView:0x79364f10 )>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
Any help would be appreciated. Thanks.
Set translatesAutoresizingMaskIntoConstraints for label to false:
label.setTranslatesAutoresizingMaskIntoConstraints(false)
See Adopting Auto Layout:
For views that are aware of Auto Layout, in most circumstances you
want translatesAutoresizingMaskIntoConstraints to be NO. The reason is
that the constraints generated by translating the autoresizing mask
are already sufficient to completely specify the frame of a view given
its superview’s frame, which is generally too much. For example, this
translation would prevent a button from automatically assuming its
optimal width when its title is changed.
From experience, forgetting to set that flag on programmatically created views has to be the number one cause of constraint exceptions.
To answer your question regarding mixing Auto Layout and Auto Resizing; both can be freely mixed and matched. However it's not correct to say that your project is using both. If you have Auto Layout enabled, that applies to the entire project. Views may still be configured using Auto Resizing, but what is actually happening is that those specifications are being translated into Auto Layout constraints. The problem above is that you have the Auto Resizing view - label - with it's translated constraints, conflicting with additional Auto Layout constraints that you specify.

Conflicting constraints on GIDSignInButton in Google Sign-In SDK 2.0.1

I'm trying to upgrade from Google Sign-In SDK 1.0.0 to 2.0.1 and ran into some conflicting constraints when trying to position an instance of the GIDSignInButton.
It seems like GIDSignInButton may define its own dynamic constrains which conflict with the ones I set in Interface Builder. I'm not able to verify this since the SDK is closed source.
The constraint warning can actually be reproduced with Google's own sample code on https://github.com/googlesamples/google-services/tree/81c831d85a67157746009fa2df81a683f860d21e/ios/signin.
Is there a work around to position this button or is this just a bug in SDK 2.0.1?
Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x7f9e0064b650 V:[UIView:0x7f9e0064b360(198)]>",
"<NSLayoutConstraint:0x7f9e0064b830 UIView:0x7f9e0064b360.centerY == GIDSignInButton.centerY (Names: GIDSignInButton:0x7f9e0046f000 )>",
"<NSAutoresizingMaskLayoutConstraint:0x7f9e006603c0 h=--& v=--& GIDSignInButton.midY == + 97 (Names: GIDSignInButton:0x7f9e0046f000 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7f9e0064b830 UIView:0x7f9e0064b360.centerY == GIDSignInButton.centerY (Names: GIDSignInButton:0x7f9e0046f000 )>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x7f9e00476cd0 GIDSignInButton.width == 3.26531*GIDSignInButton.height (Names: GIDSignInButton:0x7f9e0046f000 )>",
"<NSLayoutConstraint:0x7f9e00476f20 H:[GIDSignInButton(160)] (Names: GIDSignInButton:0x7f9e0046f000 )>",
"<NSAutoresizingMaskLayoutConstraint:0x7f9e00660410 h=--& v=--& V:[GIDSignInButton(44)] (Names: GIDSignInButton:0x7f9e0046f000 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7f9e00476cd0 GIDSignInButton.width == 3.26531*GIDSignInButton.height (Names: GIDSignInButton:0x7f9e0046f000 )>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x7f9e0064b7e0 UIView:0x7f9e0064b360.centerX == GIDSignInButton.centerX (Names: GIDSignInButton:0x7f9e0046f000 )>",
"<NSLayoutConstraint:0x7f9e00657480 H:[UIView:0x7f9e0064b360]-(0)-| (Names: '|':UIView:0x7f9e0064b050 )>",
"<NSLayoutConstraint:0x7f9e006574d0 H:|-(0)-[UIView:0x7f9e0064b360] (Names: '|':UIView:0x7f9e0064b050 )>",
"<NSAutoresizingMaskLayoutConstraint:0x7f9e0065dda0 h=--& v=--& GIDSignInButton.midX == + 207 (Names: GIDSignInButton:0x7f9e0046f000 )>",
"<NSLayoutConstraint:0x7f9e0046d5e0 'UIView-Encapsulated-Layout-Width' H:[UIView:0x7f9e0064b050(375)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7f9e0064b7e0 UIView:0x7f9e0064b360.centerX == GIDSignInButton.centerX (Names: GIDSignInButton:0x7f9e0046f000 )>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
I had the same issue and the solution I found was to embed the google sign-in button in another view and set the constraints on the container.
the only constraints i gave to the GIDSignInButton instance was center (x,y) in container cause otherwise it will still be shifted to the right.
I hope this helps
Google has fixed this bug in Google Sign-In SDK 2.1.0 (released on 6/17/2015).
Fixes Auto Layout issues with GIDSignInButton.

When I run the app, the layouts are ignored

I tried adding constraints to a UICollectionView and a UILabel programmatically. Here is how I did it:
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:#"V:|-0-[_labelToChange(30)]-0-[_datesCollectionView]-0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_labelToChange, _datesCollectionView)]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:#"H:|-0-[_labelToChange]-0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_labelToChange)]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:#"H:|-0-[_datesCollectionView]-0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_datesCollectionView)]];
When I run the app, the constraints are ignored, and I get the following error:
Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x7f96c9daae70 H:|-(0)-[UICollectionView:0x7f96ca15a800] (Names: '|':DIDatepicker:0x7f96c9d7f950 )>",
"<NSAutoresizingMaskLayoutConstraint:0x7f96c9db6b00 h=--& v=--& UICollectionView:0x7f96ca15a800.midX == + 300>",
"<NSAutoresizingMaskLayoutConstraint:0x7f96c9db6b50 h=--& v=--& H:[UICollectionView:0x7f96ca15a800(540)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7f96c9daae70 H:|-(0)-[UICollectionView:0x7f96ca15a800] (Names: '|':DIDatepicker:0x7f96c9d7f950 )>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
2015-06-04 13:58:14.692 myApp[581:8508] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x7f96c9daaad0 H:|-(0)-[UILabel:0x7f96c9da8290] (Names: '|':DIDatepicker:0x7f96c9d7f950 )>",
"<NSLayoutConstraint:0x7f96c9daab20 H:[UILabel:0x7f96c9da8290]-(0)-| (Names: '|':DIDatepicker:0x7f96c9d7f950 )>",
"<NSLayoutConstraint:0x7f96c9daaef0 H:[UICollectionView:0x7f96ca15a800]-(0)-| (Names: '|':DIDatepicker:0x7f96c9d7f950 )>",
"<NSAutoresizingMaskLayoutConstraint:0x7f96c9db6b00 h=--& v=--& UICollectionView:0x7f96ca15a800.midX == + 300>",
"<NSAutoresizingMaskLayoutConstraint:0x7f96c9db6b50 h=--& v=--& H:[UICollectionView:0x7f96ca15a800(540)]>",
"<NSAutoresizingMaskLayoutConstraint:0x7f96c9db6e40 h=--& v=--& UILabel:0x7f96c9da8290.midX == + 300>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7f96c9daab20 H:[UILabel:0x7f96c9da8290]-(0)-| (Names: '|':DIDatepicker:0x7f96c9d7f950 )>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
2015-06-04 13:58:14.696 myApp[581:8508] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x7f96c9daaad0 H:|-(0)-[UILabel:0x7f96c9da8290] (Names: '|':DIDatepicker:0x7f96c9d7f950 )>",
"<NSAutoresizingMaskLayoutConstraint:0x7f96c9db6e40 h=--& v=--& UILabel:0x7f96c9da8290.midX == + 300>",
"<NSAutoresizingMaskLayoutConstraint:0x7f96c9db8960 h=--& v=--& H:[UILabel:0x7f96c9da8290(540)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7f96c9daaad0 H:|-(0)-[UILabel:0x7f96c9da8290] (Names: '|':DIDatepicker:0x7f96c9d7f950 )>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
2015-06-04 13:58:14.699 myApp[581:8508] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x7f96c9d80160 H:|-(0)-[DIDatepicker:0x7f96c9d7f950] (Names: '|':UITableViewCellContentView:0x7f96c9d7f330 )>",
"<NSLayoutConstraint:0x7f96c9d80200 H:[DIDatepicker:0x7f96c9d7f950]-(0)-| (Names: '|':UITableViewCellContentView:0x7f96c9d7f330 )>",
"<NSLayoutConstraint:0x7f96c9daaef0 H:[UICollectionView:0x7f96ca15a800]-(0)-| (Names: '|':DIDatepicker:0x7f96c9d7f950 )>",
"<NSAutoresizingMaskLayoutConstraint:0x7f96c9db6b00 h=--& v=--& UICollectionView:0x7f96ca15a800.midX == + 300>",
"<NSAutoresizingMaskLayoutConstraint:0x7f96c9db6b50 h=--& v=--& H:[UICollectionView:0x7f96ca15a800(540)]>",
"<NSLayoutConstraint:0x7f96c9db7dd0 'fittingSizeHTarget' H:[UITableViewCellContentView:0x7f96c9d7f330(375)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7f96c9daaef0 H:[UICollectionView:0x7f96ca15a800]-(0)-| (Names: '|':DIDatepicker:0x7f96c9d7f950 )>

Getting error when apply auto layout

I have a UICollectionView and a UILabel that I added constraints programmatically.
[_labelToChange setTranslatesAutoresizingMaskIntoConstraints:NO];
[_datesCollectionView setTranslatesAutoresizingMaskIntoConstraints:NO];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:#"V:|-0-[_labelToChange(30)]-0-[_datesCollectionView]-0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_labelToChange, _datesCollectionView)]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:#"H:|-0-[_labelToChange]-0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_labelToChange)]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:#"H:|-0-[_datesCollectionView]-0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_datesCollectionView)]];
When I do that, I get the following error:
2015-06-05 11:07:37.013 myApp[602:10299] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x7f87c1580420 V:[DIDatepicker:0x7f87c157fda0(94)]>",
"<NSLayoutConstraint:0x7f87c1580560 V:|-(0)-[DIDatepicker:0x7f87c157fda0] (Names: '|':UITableViewCellContentView:0x7f87c157f760 )>",
"<NSLayoutConstraint:0x7f87c1580600 V:[DIDatepicker:0x7f87c157fda0]-(0)-| (Names: '|':UITableViewCellContentView:0x7f87c157f760 )>",
"<NSLayoutConstraint:0x7f87c157ed80 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7f87c157f760(0)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7f87c1580420 V:[DIDatepicker:0x7f87c157fda0(94)]>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
2015-06-05 11:07:37.018 myApp[602:10299] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x7f87c1580560 V:|-(0)-[DIDatepicker:0x7f87c157fda0] (Names: '|':UITableViewCellContentView:0x7f87c157f760 )>",
"<NSLayoutConstraint:0x7f87c1580600 V:[DIDatepicker:0x7f87c157fda0]-(0)-| (Names: '|':UITableViewCellContentView:0x7f87c157f760 )>",
"<NSLayoutConstraint:0x7f87c15a95f0 V:|-(0)-[UILabel:0x7f87c15a8840] (Names: '|':DIDatepicker:0x7f87c157fda0 )>",
"<NSLayoutConstraint:0x7f87c15a9790 V:[UILabel:0x7f87c15a8840(30)]>",
"<NSLayoutConstraint:0x7f87c15a98e0 V:[UILabel:0x7f87c15a8840]-(0)-[UICollectionView:0x7f87c1959000]>",
"<NSLayoutConstraint:0x7f87c15a9930 V:[UICollectionView:0x7f87c1959000]-(0)-| (Names: '|':DIDatepicker:0x7f87c157fda0 )>",
"<NSLayoutConstraint:0x7f87c157ed80 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7f87c157f760(0)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7f87c15a98e0 V:[UILabel:0x7f87c15a8840]-(0)-[UICollectionView:0x7f87c1959000]>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
What can I do to fix it?
Update
Thanks #rdelmar!! I did what #rdelmar said, and I now 1 error goes away but the other is still there:
2015-06-05 12:52:14.102 myApp[2373:44139] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x7fa2e1d80470 V:[DIDatepicker:0x7fa2e1d7fd10]-(0)-| (Names: '|':UITableViewCellContentView:0x7fa2e1d7f6d0 )>",
"<NSLayoutConstraint:0x7fa2e1d80510 V:|-(0)-[DIDatepicker:0x7fa2e1d7fd10] (Names: '|':UITableViewCellContentView:0x7fa2e1d7f6d0 )>",
"<NSLayoutConstraint:0x7fa2e1da9740 V:|-(0)-[UILabel:0x7fa2e1da8970] (Names: '|':DIDatepicker:0x7fa2e1d7fd10 )>",
"<NSLayoutConstraint:0x7fa2e1da9990 V:[UILabel:0x7fa2e1da8970]-(0)-[UICollectionView:0x7fa2e20f8e00]>",
"<NSLayoutConstraint:0x7fa2e1da9a10 V:[UICollectionView:0x7fa2e20f8e00(85)]>",
"<NSLayoutConstraint:0x7fa2e1da9a60 V:[UICollectionView:0x7fa2e20f8e00]-(0)-| (Names: '|':DIDatepicker:0x7fa2e1d7fd10 )>",
"<NSLayoutConstraint:0x7fa2e1da4a50 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7fa2e1d7f6d0(0)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7fa2e1da9990 V:[UILabel:0x7fa2e1da8970]-(0)-[UICollectionView:0x7fa2e20f8e00]>

Programmatically attempting NSLayoutContraint gives "Unable to simultaneously satisfy constraints."

I seem to be having some problems settings up my constraints programmatically for a UITableView I am using. My attempt is below, and have tried every combination of using the translatesAutoresizingMaskIntoConstraints possible.
self.view.translatesAutoresizingMaskIntoConstraints = NO;
_tableView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:#"V:|-100-[_tableView]-20-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_tableView)]];
I am just trying to add a space to the beginning and bottom of my UITableView on a UIViewController. Could anyone help with this?
The long, long error is below.
Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSAutoresizingMaskLayoutConstraint:0x75c8500 h=-&- v=-&- UITableView:0x799e400.midY == UIView:0x71a4ec0.midY>",
"<NSLayoutConstraint:0x71a5800 V:[UITableView:0x799e400]-(20)-| (Names: '|':UIView:0x71a4ec0 )>",
"<NSLayoutConstraint:0x71a5a60 V:|-(100)-[UITableView:0x799e400] (Names: '|':UIView:0x71a4ec0 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x71a5800 V:[UITableView:0x799e400]-(20)-| (Names: '|':UIView:0x71a4ec0 )>
Break on objc_exception_throw to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
2013-04-04 20:06:57.648 New eCard[29731:c07] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSAutoresizingMaskLayoutConstraint:0x75c8540 h=-&- v=-&- UITableView:0x799e400.height == UIView:0x71a4ec0.height>",
"<NSAutoresizingMaskLayoutConstraint:0x75c8500 h=-&- v=-&- UITableView:0x799e400.midY == UIView:0x71a4ec0.midY>",
"<NSLayoutConstraint:0x71a5a60 V:|-(100)-[UITableView:0x799e400] (Names: '|':UIView:0x71a4ec0 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x71a5a60 V:|-(100)-[UITableView:0x799e400] (Names: '|':UIView:0x71a4ec0 )>
Break on objc_exception_throw to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSAutoresizingMaskLayoutConstraint:0x75c8540 h=-&- v=-&- UITableView:0x799e400.height == UIView:0x71a4ec0.height>",
"<NSAutoresizingMaskLayoutConstraint:0x75c8500 h=-&- v=-&- UITableView:0x799e400.midY == UIView:0x71a4ec0.midY>",
"<NSLayoutConstraint:0x71a5800 V:[UITableView:0x799e400]-(20)-| (Names: '|':UIView:0x71a4ec0 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x71a5800 V:[UITableView:0x799e400]-(20)-| (Names: '|':UIView:0x71a4ec0 )>
Break on objc_exception_throw to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
I found this issue about UICollectionView. I guess that is a good point to start debugging.
UICollectionView Cell + UiLabel with AutoLayout
Some other links with solutions I tried without success :
https://blog.safaribooksonline.com/2012/10/27/tip-unsatisfiable-auto-layouts-in-ios-6/
UITableView with autolayout and offset constraints

Resources