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];
Related
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.
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
I am setting some specifics constraints for iPhone 4 when the app is ran on this device. Everything look great in terms of alignment and everything.
But, I am getting an error for all my constraints that is trying to recover them by breaking the constraints.
This method gets call in my viewDidLoad when it detects if its an iPhone 4
- (void) addConstraints {
// removing automatic system constraints
[self.view removeConstraints:self.view.constraints];
[self.view setTranslatesAutoresizingMaskIntoConstraints:NO];
NSDictionary *views = NSDictionaryOfVariableBindings(appBackground, myCustomer, myItemDetails, myItemQuantity, myItemPrice, myNext, myBtn); // UIImageView, UITextField, UIButton
for (UIView *view in [views allValues]) {
view.translatesAutoresizingMaskIntoConstraints = NO;
}
NSDictionary *metrics = #{#"width": #210.0, #"height": #42.0, #"verticalSpacing": #34};
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:#"V:|[appBackground]|"
options:0
metrics:nil
views:views];
constraints = [constraints arrayByAddingObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:#"H:|[appBackground]|"
options:0
metrics:nil
views:views]];
constraints = [constraints arrayByAddingObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:#"V:|-(85)-[myCustomer(==height)]-(verticalSpacing)-[myItemDetails(==height)]-(verticalSpacing)-[myItemQuantity(==height)]-(verticalSpacing)-[myItemPrice(==height)]-(18)-[myNext(==35)]-(71.5)-[myBtn(==50)]-(7.5)-|"
options:0
metrics:metrics
views:views]];
constraints = [constraints arrayByAddingObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:#"H:|-50-[myCustomer(==width)]-|"
options:0
metrics:metrics
views:views]];
constraints = [constraints arrayByAddingObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:#"H:|-50-[myItemDetails(==width)]-|"
options:0
metrics:metrics
views:views]];
constraints = [constraints arrayByAddingObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:#"H:|-50-[myItemQuantity(==width)]-|"
options:0
metrics:metrics
views:views]];
constraints = [constraints arrayByAddingObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:#"H:|-50-[myItemPrice(==width)]-|"
options:0
metrics:metrics
views:views]];
constraints = [constraints arrayByAddingObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:#"H:|-78-[myNext(==173)]-|"
options:0
metrics:metrics
views:views]];
constraints = [constraints arrayByAddingObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:#"H:|-11.5-[myBtn(==54)]-|"
options:0
metrics:metrics
views:views]];
[self.view addConstraints:constraints];
}
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:0xb8282f0 H:|-(50)-[UITextField:0xb823fc0] (Names: '|':UIView:0xb82f360 )>",
"<NSLayoutConstraint:0xb828320 H:[UITextField:0xb823fc0(210)]>",
"<NSLayoutConstraint:0xb82be10 H:[UITextField:0xb823fc0]-(NSSpace(20))-| (Names: '|':UIView:0xb82f360 )>",
"<NSLayoutConstraint:0xb82d3d0 H:|-(78)-[UIButton:0xb82ad50] (Names: '|':UIView:0xb82f360 )>",
"<NSLayoutConstraint:0xb82d420 H:[UIButton:0xb82ad50(173)]>",
"<NSLayoutConstraint:0xb82d450 H:[UIButton:0xb82ad50]-(NSSpace(20))-| (Names: '|':UIView:0xb82f360 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0xb82d450 H:[UIButton:0xb82ad50]-(NSSpace(20))-| (Names: '|':UIView:0xb82f360 )>
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-08-03 14:03:29.239 iReceipt[2886:607] 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:0xb8282f0 H:|-(50)-[UITextField:0xb823fc0] (Names: '|':UIView:0xb82f360 )>",
"<NSLayoutConstraint:0xb828320 H:[UITextField:0xb823fc0(210)]>",
"<NSLayoutConstraint:0xb82be10 H:[UITextField:0xb823fc0]-(NSSpace(20))-| (Names: '|':UIView:0xb82f360 )>",
"<NSLayoutConstraint:0xb82d480 H:|-(11.5)-[UIButton:0xb820120] (Names: '|':UIView:0xb82f360 )>",
"<NSLayoutConstraint:0xb82e390 H:[UIButton:0xb820120(54)]>",
"<NSLayoutConstraint:0xb82e3c0 H:[UIButton:0xb820120]-(NSSpace(20))-| (Names: '|':UIView:0xb82f360 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0xb82e3c0 H:[UIButton:0xb820120]-(NSSpace(20))-| (Names: '|':UIView:0xb82f360 )>
Please let me know if you guys need more information..
These three constraints:
"<NSLayoutConstraint:0xb8282f0 H:|-(50)-[UITextField:0xb823fc0] (Names: '|':UIView:0xb82f360 )>",
"<NSLayoutConstraint:0xb828320 H:[UITextField:0xb823fc0(210)]>",
"<NSLayoutConstraint:0xb82be10 H:[UITextField:0xb823fc0]-(NSSpace(20))-| (Names: '|':UIView:0xb82f360 )>",
dictate that the superview be 50 + 210 + 20 == 280 points wide.
These three constraints:
"<NSLayoutConstraint:0xb82d3d0 H:|-(78)-[UIButton:0xb82ad50] (Names: '|':UIView:0xb82f360 )>",
"<NSLayoutConstraint:0xb82d420 H:[UIButton:0xb82ad50(173)]>",
"<NSLayoutConstraint:0xb82d450 H:[UIButton:0xb82ad50]-(NSSpace(20))-| (Names: '|':UIView:0xb82f360 )>"
dictate that the same superview be 78 + 173 + 20 == 271 points wide.
Obviously, those can't both be true at the same time. You need to decide what you really want to happen here. We can't read your mind and neither can UIKit.
Usually, you don't set a width constraint on a button; you let it use its intrinsic size with appropriate priorities for content hugging and compression resistance. Also, you may not wish to set hard spacing on either side of the button. Either let that spacing vary without constraint so the button can be its intrinsic size, lower the priority of that constraint so it's optional, or make an inequality so you have a minimum spacing but not an exact spacing.
You are constraining your views too much. You must always leave for example one of leftmargin, width and rightmargin flexible, and let the autolayout engine stretch that one.
A single dash without any number means default distance, which is 20 pixels. So, if you remove your trailing constraints on
#"H:|-78-[myNext(==173)]-|"
#"H:|-11.5-[myBtn(==54)]-|"
and change them to
#"H:|-78-[myNext(==173)]"
#"H:|-11.5-[myBtn(==54)]"
the layout engine will then stretch the rightmargin of the button to make it fit the
containing view. There are of course other ways of loosening up these constraints, all depending on your design goals.
Personally, I never use the standard API:s for autolayout anymore. I use the library PureLayout, which abstracts autolayout wonderfully!
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 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.