I'm practicing with visual format layout using Objective-C & XCode 7 but struggling with getting a very simple layout to work.
My app is just a simple Single View application and I'm trying to add a UILabel to main view.
Below is the code.
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UILabel *label = [[UILabel alloc] init];
label.text = #"Hello world";
label.layer.borderWidth = 1.0f;
label.layer.borderColor = [UIColor redColor].CGColor;
[self.view addSubview:label];
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(label);
[self.view addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:#"|[label]|"
options:0
metrics:nil views:viewsDictionary]];
[self.view addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:#"V:|[label]|"
options:0
metrics:nil views:viewsDictionary]];
NSLog(#"constraints: %#", self.view.constraints);
}
Run this I got a bunch of errors:
2016-02-01 18:14:15.729 AutolayoutVisualFormat[26671:909266] constraints: (
"<_UILayoutSupportConstraint:0x79771ab0 V:[_UILayoutGuide:0x7976f950(0)]>",
"<_UILayoutSupportConstraint:0x79786d30 V:|-(0)-[_UILayoutGuide:0x7976f950] (Names: '|':UIView:0x79771790 )>",
"<_UILayoutSupportConstraint:0x797884e0 V:[_UILayoutGuide:0x79772e30(0)]>",
"<_UILayoutSupportConstraint:0x79777540 _UILayoutGuide:0x79772e30.bottom == UIView:0x79771790.bottom>",
"<NSLayoutConstraint:0x7978d930 H:|-(0)-[UILabel:0x7976d000'Hello world'] (Names: '|':UIView:0x79771790 )>",
"<NSLayoutConstraint:0x7978da50 H:[UILabel:0x7976d000'Hello world']-(0)-| (Names: '|':UIView:0x79771790 )>",
"<NSLayoutConstraint:0x7978fcb0 V:|-(0)-[UILabel:0x7976d000'Hello world'] (Names: '|':UIView:0x79771790 )>",
"<NSLayoutConstraint:0x7978fce0 V:[UILabel:0x7976d000'Hello world']-(0)-| (Names: '|':UIView:0x79771790 )>"
)
2016-02-01 18:14:15.733 AutolayoutVisualFormat[26671:909266] 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:0x7a0630a0 h=--& v=--& H:[UILabel:0x7976d000'Hello world'(0)]>",
"<NSLayoutConstraint:0x7978d930 H:|-(0)-[UILabel:0x7976d000'Hello world'] (Names: '|':UIView:0x79771790 )>",
"<NSLayoutConstraint:0x7978da50 H:[UILabel:0x7976d000'Hello world']-(0)-| (Names: '|':UIView:0x79771790 )>",
"<NSLayoutConstraint:0x7a080130 'UIView-Encapsulated-Layout-Width' H:[UIView:0x79771790(320)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7978da50 H:[UILabel:0x7976d000'Hello world']-(0)-| (Names: '|':UIView:0x79771790 )>
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.
2016-02-01 18:14:15.733 AutolayoutVisualFormat[26671:909266] 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:0x7a0758b0 h=--& v=--& V:[UILabel:0x7976d000'Hello world'(0)]>",
"<NSLayoutConstraint:0x7978fcb0 V:|-(0)-[UILabel:0x7976d000'Hello world'] (Names: '|':UIView:0x79771790 )>",
"<NSLayoutConstraint:0x7978fce0 V:[UILabel:0x7976d000'Hello world']-(0)-| (Names: '|':UIView:0x79771790 )>",
"<NSLayoutConstraint:0x7a081610 'UIView-Encapsulated-Layout-Height' V:[UIView:0x79771790(568)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7978fce0 V:[UILabel:0x7976d000'Hello world']-(0)-| (Names: '|':UIView:0x79771790 )>
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.
Add this line it will work
[label setTranslatesAutoresizingMaskIntoConstraints:NO];
When using Auto Layout on views created in code, there are a few
caveats to be aware of. The first is related to the value of the
property translatesAutoresizingMaskIntoConstraints. This property is
YES by default, which means Auto Layout constraints will be created
based on the view's autoresizing mask. We want the view to respect
the Auto Layout constraints we will add so this property should be
set to NO.
It was old technology that was earlier used for managing view sizes
You can refer this link UIView autoresizingMask - Interface Builder to Code - Programmatically create struts and springs - Swift or Objective-C
When this property is YES, which it is by default, the autoresizing mask of a view is translated into constraints. For example, if a view
is configured as in Figure 6-1 and
translatesAutoresizingMaskIntoConstraints is YES, then the
constraints |-20-[button]-20-| and V:|-20-[button(20)] are added to
the view’s superview. The net effect is that unaware views behave as
they did in versions of OS X prior to 10.7.
For views that are aware of Auto Layout, in most circumstances you will want translatesAutoresizingMaskIntoConstraints to be NO.
This is because 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 will prevent a button from automatically
assuming its optimal width when its title is changed.
Related
I have a UILabel and a UITextField that I created, and added constraint programmatically. Here is the code I inserted in viewDidLoad:
UILabel *currencyLabel = [[UILabel alloc] init];
UITextField dollars = [[UITextField alloc] init];
CGRect label = CGRectMake(0, 0, 12, 33);
currencyLabel.frame = label;
CGRect textField = CGRectMake(12, 0, self.amountView.frame.size.width - 12, 33);
dollars.frame = textField;
[self.amountView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:#"H:|-0-[currencyLabel(12)]-3-[dollars]-0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(currencyLabel, dollars)]];
[self.amountView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:#"V:|-0-[currencyLabel]-0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(currencyLabel)]];
[self.amountView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:#"V:|-0-[dollars]-0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(dollars)]];
When I run it, the textField and label are not positioned correctly, and I get the following error:
2015-06-10 22:20:17.248 myApp[2591:134955] 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:0x7f82995382d0 H:|-(0)-[UILabel:0x7f829959e320] (Names: '|':UIView:0x7f8299450070 )>",
"<NSLayoutConstraint:0x7f82995bd6e0 H:[UILabel:0x7f829959e320(12)]>",
"<NSLayoutConstraint:0x7f82995bd730 H:[UILabel:0x7f829959e320]-(3)-[UITextField:0x7f82994e8bf0]>",
"<NSAutoresizingMaskLayoutConstraint:0x7f82995d4310 h=--& v=--& UITextField:0x7f82994e8bf0.midX == + 221>",
"<NSAutoresizingMaskLayoutConstraint:0x7f82995d4360 h=--& v=--& H:[UITextField:0x7f82994e8bf0(418)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7f82995bd730 H:[UILabel:0x7f829959e320]-(3)-[UITextField:0x7f82994e8bf0]>
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-10 22:20:17.250 myApp[2591:134955] 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:0x7f82994edad0 H:[UIButton:0x7f829954ee80'Expense'(71)]>",
"<NSLayoutConstraint:0x7f829953bec0 H:[UIButton:0x7f829954c6f0'Income'(71)]>",
"<NSLayoutConstraint:0x7f82994503a0 UIButton:0x7f829954c6f0'Income'.leading == UITableViewCellContentView:0x7f82994582f0.leadingMargin>",
"<NSLayoutConstraint:0x7f82994504b0 H:[UIButton:0x7f829954c6f0'Income']-(0)-[UIButton:0x7f829954ee80'Expense']>",
"<NSLayoutConstraint:0x7f8299450550 UIView:0x7f8299450070.trailing == UITableViewCellContentView:0x7f82994582f0.trailingMargin>",
"<NSLayoutConstraint:0x7f82994505a0 H:[UIButton:0x7f829954ee80'Expense']-(12)-[UIView:0x7f8299450070]>",
"<NSLayoutConstraint:0x7f82995bd780 H:[UITextField:0x7f82994e8bf0]-(0)-| (Names: '|':UIView:0x7f8299450070 )>",
"<NSAutoresizingMaskLayoutConstraint:0x7f82995d4310 h=--& v=--& UITextField:0x7f82994e8bf0.midX == + 221>",
"<NSAutoresizingMaskLayoutConstraint:0x7f82995d4360 h=--& v=--& H:[UITextField:0x7f82994e8bf0(418)]>",
"<NSLayoutConstraint:0x7f82995c1280 'UIView-Encapsulated-Layout-Width' H:[UITableViewCellContentView:0x7f82994582f0(375)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7f82995bd780 H:[UITextField:0x7f82994e8bf0]-(0)-| (Names: '|':UIView:0x7f8299450070 )>
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.
Try add:
self.view.translatesAutoresizingMaskIntoConstraints = NO;
I see "NSAutoresizingMaskLayoutConstraint", I think you don't want these constraints
Trying to create a view with a UITextField and UILabel beyond it.
What's wrong with the following code?
- (UIView *)tableHeaderView{
NSArray *constraints;
UIView *view = [[UIView alloc]initWithFrame:(CGRect){0,0,self.view.frame.size.width, 88}];
UITextField *tf = [[UITextField alloc]init];
tf.borderStyle = UITextBorderStyleRoundedRect;
tf.text = _filter.name;
[view addSubview:tf];
UILabel *titleLabel = [[UILabel alloc] init];
titleLabel.textAlignment = NSTextAlignmentCenter;
titleLabel.translatesAutoresizingMaskIntoConstraints = NO;
titleLabel.text = [NSString stringWithFormat:NSLocalizedString(#"Found results: %d", nil), _filter.resultsCount];
[view addSubview:titleLabel];
constraints = [NSLayoutConstraint constraintsWithVisualFormat:#"|-[titleLabel]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(titleLabel)];
[view addConstraints:constraints];
constraints = [NSLayoutConstraint constraintsWithVisualFormat:#"|-[tf]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(tf)];
[view addConstraints:constraints];
constraints = [NSLayoutConstraint constraintsWithVisualFormat:#"V:|[titleLabel]-8-[tf]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(titleLabel, tf)];
[view addConstraints:constraints];
}
Error message:
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:0x15dd2fc0 V:|-(0)-[UILabel:0x15dd1e10] (Names: '|':UIView:0x15dc4f90 )>",
"<NSLayoutConstraint:0x15dd3120 V:[UILabel:0x15dd1e10]-(8)-[UITextField:0x15dbe780]>",
"<NSAutoresizingMaskLayoutConstraint:0x15de2300 h=--& v=--& UITextField:0x15dbe780.midY ==>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x15dd3120 V:[UILabel:0x15dd1e10]-(8)-[UITextField:0x15dbe780]>
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.
2014-07-14 14:01:30.216 DossierPolice[4724:60b] 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:0x15dd2e20 H:[UITextField:0x15dbe780]-(NSSpace(20))-| (Names: '|':UIView:0x15dc4f90 )>",
"<NSAutoresizingMaskLayoutConstraint:0x15de1ee0 h=--& v=--& UITextField:0x15dbe780.midX ==>",
"<NSAutoresizingMaskLayoutConstraint:0x15de22d0 h=--& v=--& H:[UITextField:0x15dbe780(0)]>",
"<NSAutoresizingMaskLayoutConstraint:0x13a9eda0 h=--& v=--& H:[UIView:0x15dc4f90(320)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x15dd2e20 H:[UITextField:0x15dbe780]-(NSSpace(20))-| (Names: '|':UIView:0x15dc4f90 )>
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.
2014-07-14 14:01:30.217 DossierPolice[4724:60b] 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:0x15dd3160 V:[UITextField:0x15dbe780]-(0)-| (Names: '|':UIView:0x15dc4f90 )>",
"<NSAutoresizingMaskLayoutConstraint:0x15de2300 h=--& v=--& UITextField:0x15dbe780.midY ==>",
"<NSAutoresizingMaskLayoutConstraint:0x15de2330 h=--& v=--& V:[UITextField:0x15dbe780(0)]>",
"<NSAutoresizingMaskLayoutConstraint:0x13a9ee00 h=--& v=--& V:[UIView:0x15dc4f90(88)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x15dd3160 V:[UITextField:0x15dbe780]-(0)-| (Names: '|':UIView:0x15dc4f90 )>
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.
You forgot to set the translatesAutoresizingMaskIntoConstraints to NO on tf. This property prevents the layout engine to automatically transform the old style autoresizing masks into constraints, which is why the errors.
If you read error message cerfully you'll notice: (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
And later:
NSAutoresizingMaskLayoutConstraint:0x13a9eda0...
This means that you forgot to disable translates autoresizing mask.
Add tf.translatesAutoresizingMaskIntoConstraints = NO; to your code.
I have stuck at problem, in my application i am adding UIScrollview programatically so i am adding NSLayoutConstraint for that but when i run this output is perfect what i want but it gives me so many warning,
So please help me to removing all this warnings,
My Code is :
- (void)viewDidLoad
{
[super viewDidLoad];
UIScrollView *sc=[UIScrollView new];
sc.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:sc];
sc.backgroundColor=[UIColor purpleColor];
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(sc);
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:#"|-5-[sc]-5-|" options:0 metrics:nil views:viewsDictionary];
[self.view addConstraints:constraints];
constraints = [NSLayoutConstraint constraintsWithVisualFormat:#"V:|-5-[sc]-5-|"
options: NSLayoutFormatAlignAllRight
metrics:nil
views:viewsDictionary];
[self.view addConstraints:constraints];
}
Unnecessary warnings:
2014-02-27 15:08:26.763 TKScroller[2580:a0b] 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:0x8da0df0 H:|-(10)-[UIView:0x8d95ef0] (Names: '|':UIScrollView:0x8d93800 )>",
"<NSAutoresizingMaskLayoutConstraint:0x8da6b10 h=--& v=--& UIView:0x8d95ef0.midX ==>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x8da0df0 H:|-(10)-[UIView:0x8d95ef0] (Names: '|':UIScrollView:0x8d93800 )>
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.
2014-02-27 15:08:26.765 TKScroller[2580:a0b] 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:0x8da15b0 V:|-(3)-[UIView:0x8d95ef0] (Names: '|':UIScrollView:0x8d93800 )>",
"<NSAutoresizingMaskLayoutConstraint:0x8da59d0 h=--& v=--& UIView:0x8d95ef0.midY ==>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x8da15b0 V:|-(3)-[UIView:0x8d95ef0] (Names: '|':UIScrollView:0x8d93800 )>
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.
2014-02-27 15:08:26.766 TKScroller[2580:a0b] 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:0x8da1580 UIView:0x8d95ef0.trailing == UIScrollView:0x8d93800.trailing - 10>",
"<_UIScrollViewAutomaticContentSizeConstraint:0x8da1200 UIScrollView:0x8d93800.contentWidth{id: 128} == 0.000000>",
"<NSAutoresizingMaskLayoutConstraint:0x8da6b10 h=--& v=--& UIView:0x8d95ef0.midX ==>",
"<NSAutoresizingMaskLayoutConstraint:0x8da6e00 h=--& v=--& H:[UIView:0x8d95ef0(0)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x8da1580 UIView:0x8d95ef0.trailing == UIScrollView:0x8d93800.trailing - 10>
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.
2014-02-27 15:08:26.770 TKScroller[2580:a0b] 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:0x8da15e0 UIView:0x8d95ef0.bottom == UIScrollView:0x8d93800.bottom - 3>",
"<_UIScrollViewAutomaticContentSizeConstraint:0x8da13a0 UIScrollView:0x8d93800.contentHeight{id: 133} == 0.000000>",
"<NSAutoresizingMaskLayoutConstraint:0x8da59d0 h=--& v=--& UIView:0x8d95ef0.midY ==>",
"<NSAutoresizingMaskLayoutConstraint:0x8da46f0 h=--& v=--& V:[UIView:0x8d95ef0(0)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x8da15e0 UIView:0x8d95ef0.bottom == UIScrollView:0x8d93800.bottom - 3>
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.
From the error messages it looks like you also need to do:
self.view.translatesAutoresizingMaskIntoConstraints = NO;
These messages:
"<NSAutoresizingMaskLayoutConstraint:0x8da6b10 h=--& v=--& UIView:0x8d95ef0.midX ==>",
"<NSAutoresizingMaskLayoutConstraint:0x8da6e00 h=--& v=--& H:[UIView:0x8d95ef0(0)]>"
Lead me to believe that the parent view (self.view) is also converting autoresizing masks to constraints.
First: try advice #Jack Cox
Second:
in line
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:#"|-5-[sc]-5-|" options:0 metrics:nil views:viewsDictionary];
you not say what about orientation V: or H:? try relpace this line:
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:#"H:|-5-[sc]-5-|" options:0 metrics:nil views:viewsDictionary];
MB. your constraints array rewrite? Try it:
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:#"H:|-5-[sc]-5-|" options:0 metrics:nil views:viewsDictionary]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:#"V:|-5-[sc]-5-|" options: NSLayoutFormatAlignAllRight metrics:nil views:viewsDictionary];
I am programatically setting the following constraints on three views inside a UIView:
UIView *view1 = ((UIViewController *)[self.viewControllers objectAtIndex:0]).view;
UIView *view2 = ((UIViewController *)[self.viewControllers objectAtIndex:1]).view;
UIView *view3 = ((UIViewController *)[self.viewControllers objectAtIndex:2]).view;
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(view1, view2, view3);
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:#"H:|-0-[view1(==320)]-0-[view2(==320)]-0-[view3(==320)]|" options:0 metrics:0 views:viewsDictionary]];
My intention is that each view is 320px wide, sitting flush against one-another with no gap, and view one up against the left edge of the containing UIView.
However, when compiled, the views are laid out on-top of one-another and I get the following in the console:
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:0x211811c0 H:|-(0)-[UIView:0xc683790] (Names: '|':UIView:0xc683320 )>",
"<NSAutoresizingMaskLayoutConstraint:0x21179820 h=-&- v=-&- UIView:0xc683790.midX == UIView:0xc683320.midX - 340>",
"<NSLayoutConstraint:0x211793d0 H:[UIView:0xc6a50c0]-(0)-| (Names: '|':UIView:0xc683320 )>",
"<NSLayoutConstraint:0x21179390 H:[UIView:0xc6a50c0(320)]>",
"<NSLayoutConstraint:0x21179350 H:[UIView:0xc6a05f0]-(0)-[UIView:0xc6a50c0]>",
"<NSLayoutConstraint:0x211563d0 H:[UIView:0xc6a05f0(320)]>",
"<NSLayoutConstraint:0x21156390 H:[UIView:0xc683790]-(0)-[UIView:0xc6a05f0]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x21179350 H:[UIView:0xc6a05f0]-(0)-[UIView:0xc6a50c0]>
Try setting
[view setTranslatesAutoresizingMaskIntoConstraints:NO];
for all of your views, it usually is enough to solve this kind of problem.
I have the following simple test code in my controller:
- (void)loadView
{
UIView *view = [UIView new];
[self setView:view];
UILabel *label = [UILabel new];
[label setText:#"Hello World!"];
[view addSubview:label];
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:#"|-[label]"
options:0 metrics:nil views:NSDictionaryOfVariableBindings(label)]];
}
The code fails with the following exception and I can't figure out why. Any help would be greatly appreciated:
2013-04-15 14:15:47.880 libmarkup-test[1072: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)
(
"<NSLayoutConstraint:0x753eb60 H:|-(NSSpace(20))-[UILabel:0x7536b60] (Names: '|':UIView:0x75376a0 )>",
"<NSAutoresizingMaskLayoutConstraint:0x712a2c0 h=--& v=--& UILabel:0x7536b60.midX ==>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x753eb60 H:|-(NSSpace(20))-[UILabel:0x7536b60] (Names: '|':UIView:0x75376a0 )>
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.
The "unable to simultaneously satisfy constraints" message is especially confusing since, as far as I can tell, I'm only specifying one constraint.
It looks like you forgot to set translatesAutoresizingMaskIntoConstraints on the UILabel. By default it will be YES. So the autoresizing mask on that label are translated to additional constraints, which are then conflicting with the one you specified.
Adding this should fix the constraint issue:
label.translatesAutoresizingMaskIntoConstraints = NO;
You should probably think about a vertical constraints on that label as well.
please adjust the constraint priority( default is 1000) and hugging priority(default is 250)