160

Below is the error message I receive in the debug area. It runs fine and nothing is wrong except that I receive this error. Would this prevent apple accepting the app? How do I fix it?

2012-07-26 01:58:18.621 Rolo[33597:11303] 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:0x887d630 h=--& v=--& V:[UIButtonLabel:0x886ed80(19)]>",
    "<NSAutoresizingMaskLayoutConstraint:0x887d5f0 h=--& v=--& UIButtonLabel:0x886ed80.midY == + 37.5>",
    "<NSAutoresizingMaskLayoutConstraint:0x887b4b0 h=--& v=--& V:[UIButtonLabel:0x72bb9b0(19)]>",
    "<NSAutoresizingMaskLayoutConstraint:0x887b470 h=--& v=--& UIButtonLabel:0x72bb9b0.midY == - 0.5>",
    "<NSLayoutConstraint:0x72bf860 V:[UILabel:0x72bf7c0(17)]>",
    "<NSLayoutConstraint:0x72c2430 UILabel:0x72bfad0.top == UILabel:0x72bf7c0.top>",
    "<NSLayoutConstraint:0x72c2370 UILabel:0x72c0270.top == UILabel:0x72bfad0.top>",
    "<NSLayoutConstraint:0x72c22b0 V:[UILabel:0x72bf7c0]-(NSSpace(8))-[UIButton:0x886efe0]>",
    "<NSLayoutConstraint:0x72c15b0 V:[UILabel:0x72c0270]-(NSSpace(8))-[UIRoundedRectButton:0x72bbc10]>",
    "<NSLayoutConstraint:0x72c1570 UIRoundedRectButton:0x72bbc10.baseline == UIRoundedRectButton:0x7571170.baseline>",
    "<NSLayoutConstraint:0x72c21f0 UIRoundedRectButton:0x7571170.top == UIButton:0x886efe0.top>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x72bf860 V:[UILabel:0x72bf7c0(17)]>

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.
Léo Natan
  • 56,823
  • 9
  • 150
  • 195
Johnny Cox
  • 1,873
  • 3
  • 17
  • 17
  • 1
    This error will only happen in Xcode 4.5, so you can't submit it to the App Store anyway (until it is released) – borrrden Jul 26 '12 at 07:16
  • So is there nothing wrong then? And would it be possible to use another version of xcode to be able to submit to app store? – Johnny Cox Jul 26 '12 at 07:33
  • 1
    Yes, there is something wrong, but its irrelevant because it has to do with a feature of iOS that is not yet available in public Xcode versions. If it compiles with 4.4, you can release it using that version (it was released today). – borrrden Jul 26 '12 at 07:53
  • I get this error message for OS X apps in Xcode 4.4. I don't understand it. – Steve McLeod Aug 03 '12 at 15:15
  • @Bartłomiej Semańczyk Could you by any chance join the room: https://chat.stackoverflow.com/rooms/92522/autolayout-and-ios? Sorry it's random but would appreciate your advice on something auto layout related, thanks! – cheznead Oct 16 '15 at 15:53
  • This error also happened in Xcode 10.2 – Protocol May 02 '19 at 05:45
  • Almost 10 years later, still this error... – syloc Apr 24 '21 at 21:45

17 Answers17

301

I would recommend to debug and find which constraint is "the one you don't want". Suppose you have following issue:

enter image description here

Always the problem is how to find following Constraints and Views.

There are two solutions how to do this:

  1. DEBUG VIEW HIERARCHY (Do not recommend this way)

Since you know where to find unexpected constraints (PBOUserWorkDayHeaderView) there is a way to do this fairly well. Let's find UIView and NSLayoutConstraint in red rectangles. Since we know their id in memory it is quite easy.

  • Stop app using Debug View Hierarchy:

enter image description here

  • Find the proper UIView:

enter image description here

  • The next is to find NSLayoutConstraint we care about:

enter image description here

As you can see, the memory pointers are the same. So we know what is going on now. Additionally you can find NSLayoutConstraint in view hierarchy. Since it is selected in View, it selected in Navigator also.

enter image description here

If you need you may also print it on console using address pointer:

(lldb) po 0x17dce920
<UIView: 0x17dce920; frame = (10 30; 300 24.5); autoresize = RM+BM; layer = <CALayer: 0x17dce9b0>>

You can do the same for every constraint the debugger will point to you:-) Now you decide what to do with this.

  1. PRINT IT BETTER (I really recommend this way, this is of Xcode 7)
  • set unique identifier for every constraint in your view:

enter image description here

  • create simple extension for NSLayoutConstraint:

SWIFT:

extension NSLayoutConstraint {

    override public var description: String {
        let id = identifier ?? ""
        return "id: \(id), constant: \(constant)" //you may print whatever you want here
    }
}

OBJECTIVE-C

@interface NSLayoutConstraint (Description)

@end

@implementation NSLayoutConstraint (Description)

-(NSString *)description {
    return [NSString stringWithFormat:@"id: %@, constant: %f", self.identifier, self.constant];
}

@end
  • build it once again, and now you have more readable output for you:

enter image description here

  • once you got your id you can simple tap it in your Find Navigator:

enter image description here

  • and quickly find it:

enter image description here

HOW TO SIMPLE FIX THAT CASE?

  • try to change priority to 999 for broken constraint.
halfer
  • 19,824
  • 17
  • 99
  • 186
Bartłomiej Semańczyk
  • 59,234
  • 49
  • 233
  • 358
112

The problem you're having is the NSAutoresizingMaskLayoutConstraints should not be in there. This is the old system of springs and struts. To get rid of it, run this method on each view that you're wanting to constrain:

[view setTranslatesAutoresizingMaskIntoConstraints:NO];
iwasrobbed
  • 46,496
  • 21
  • 150
  • 195
David Wong
  • 10,284
  • 3
  • 39
  • 34
  • 5
    what are some reasons for a view not appearing at all when setting setTranslatesAutoresizingMaskIntoConstraints to NO? – topwik Jun 26 '13 at 19:59
  • 1
    as an example, I create an SSBadgeView (UIView), add an imageView subView to the SSBadgeView, then add the SSBAdgeView as a subview to a UIReuseableView. I add some constraints to the SSBadgeView and setTranslatesAutoresizingMaskIntoConstraints:NO on the SSBadgeView. the image subView of the SSBadgeView is laid out as expected but the SSBadgeView parent of the image is nowhere to be seen. – topwik Jun 26 '13 at 20:00
  • 1
    You forgot to disable TranslatesAutoresizingMaskIntoConstraints in your sub sub views – Softlion Dec 08 '13 at 22:31
  • This is what happen when I set this property, https://drive.google.com/file/d/0BxuYs8WHXCF7bV9ndHFrQ0dMYVE/view?usp=sharing I am using this code line: [self.contentView setTranslatesAutoresizingMaskIntoConstraints:NO]; for (UIView *view in self.contentView.subviews) { [view setTranslatesAutoresizingMaskIntoConstraints:NO]; } Earlier it used to look like: https://drive.google.com/file/d/0BxuYs8WHXCF7OWlvZGQwN3FlbzQ/view?usp=sharing It worked though, I must say. – rptwsthi Jul 22 '15 at 09:27
29

Be careful, that you do not use more than one constraint in the same direction and type.

For example: Vertical constraint for trailing = 15 and another one is >= 10.

Sometimes, Xcode creates some constraints you don't notice. You have to get rid of redundant constraints and the log warning will surely disappear.

enter image description here

Additionaly, you can read and detect some certain reasons, directly from the log:

NSLayoutConstraint:0xa338390 V:|-(15)-[UILabel:0xa331260] (Names: '|':UILabel:0xa330270 )>

This we can read as problem in UILabel constraint, it is leading vertical constraint being 15pt long.

NSLayoutConstraint:0x859ab20 H:-(13)-|[UIView:0x85a8fb0]...

This would be trailing horizontal constraint etc.

pedrouan
  • 12,762
  • 3
  • 58
  • 74
7

use swift this code

view.translatesAutoresizingMaskIntoConstraints = false
Arun Kumar P
  • 820
  • 2
  • 12
  • 25
6

I had quite a number of these exceptions thrown, the fastest and easiest way I found to solve them was to find unique values in the exceptions which I then searched for in the storyboard source code. This helped me to find the actual view(s) and constraint(s) causing the problem (I use meaningful userLabels on all of the views, which makes it a lot easier to track the constraints and views)...

So, using the above exceptions I would open the storyboard as "source code" in xcode (or another editor) and look for something I can find...

<NSLayoutConstraint:0x72bf860 V:[UILabel:0x72bf7c0(17)]> 

.. this looks like a vertical (V) constraint on a UILabel with a value of (17).

Looking through the exceptions I also find

<NSLayoutConstraint:0x72c22b0 V:[UILabel:0x72bf7c0]-(NSSpace(8))-[UIButton:0x886efe0]>

Which looks like the UILabel(0x72bf7c0) is close to a UIButton(0x886efe0) with some vertical spacing (8)..

That will hopefully be enough for me to find the specific views in the storyboard source code (probably by searching the text for "17" initially), or at least a few likely candidates. From there I should be able to actually figure out which views these are in the storyboard which will make it a lot easier to identify the problem (look for "duplicated" pinning or pinning that conflicts with size constraints).

C B J
  • 1,838
  • 16
  • 22
  • "I use meaningful userLabels" -- what are userLabels in this context? (like how to you set them) – Stripes May 01 '14 at 23:58
  • In the Document section of the identity inspector is a field "Label".. that gets translated to a "userLabel" value in the story board source code. – C B J May 02 '14 at 00:29
  • You can also set them by clicking on a selected view in the left-hand "Overview" panel (a bit like renaming a file in finder) – C B J May 02 '14 at 00:30
  • 1
    Probably the best thing I've read in regards to solving the dreaded "Unable to simultaneously satisfy constraints." pain. I found that the object shown at this point "Will attempt to recover by breaking constraint – latenitecoder Sep 26 '14 at 19:50
6

I had a hard time figuring out what constraints were causing this error. Here is a simpler way to do it.

I'm using Xcode 6.1.1

  1. "Command + A" to select all the UILabels, UIImages etc.
  2. Click Editor -> Pin > (Select...) to Superview
  3. again click Editor -> Resolve Auto Layout Issues -> Add Missing Constraints or Reset to Suggested Constraints. It depends on your case.
TheRealRonDez
  • 2,807
  • 2
  • 30
  • 40
5

I had this issue because my .xib files were using autolayout.

In the file inspector, first tab. Unticking "Use Autolayout" solved the problem.

autolayout file inspector

Stéphane Bruckert
  • 21,706
  • 14
  • 92
  • 130
  • So I did that and it fixed the problem, but a 'UIImageView' I had on top of the screen (which I used as a navigation bar) got moved to the bottom of the screen. Do you know why that happened? – Fabio Aug 01 '13 at 23:31
  • 1
    Autolayout uses **constraints** to govern the layout of objects. Since you just disabled autolayout, these constraints most probably have disappeared and so the position of your `UIImageView` has changed. You must set this position again, either programmatically or through the Interface Builder. – Stéphane Bruckert Aug 02 '13 at 13:57
5

Here is my experience and Solution. I didn't touched code

  1. Select view (UILabel, UIImage etc)
  2. Editor > Pin > (Select...) to Superview
  3. Editor > Resolve Auto Layout Issues > Add Missing Constraints
royemi
  • 83
  • 1
  • 9
2

I have followed SO questions and answers from each search query. But they all are related with specific one.

At the basic, I mean before you are going to write down a format (may be a simple one) it will gives you a warnings.

From iOS 8.0 by default views are size classes. Even if you disable size classes it will still contains some auto layout constraints.

So if you are planning to set constrains via code using VFL. Then you must take care of one below line.

// Remove constraints if any.
[self.view removeConstraints:self.view.constraints];

I had search a lot in SO, but the solution was lies in Apple Sample Code.

So you must have to remove default constraints before planning to add new one.

Kampai
  • 22,848
  • 21
  • 95
  • 95
1

For me the main reason of this problem was that I forgot to uncheck AutoLayout in the Xib editor. In fact, I did a lot of adjustments of the XIB in code.

gdm
  • 7,647
  • 3
  • 41
  • 71
1
 for(UIView *view in [self.view subviews]) {
    [view setTranslatesAutoresizingMaskIntoConstraints:NO];
}

This helped me catch the view causing the problem.

1

None of the foregoing answers is helpful in my situation. I am running XCode 10.1 and testing my app on the simulator for an "iPad (5th generation)". The simulator is running iOS 12.1.

I've got a simple root view in my storyboard, with two UITextField subviews. There are no constraints being used in the storyboard at all. And I have no UIButtonBarView objects in the app or the storyboard.

No messages get printed when the app launches and lays the root view out. None when the simulated device is rotated.

But in the simulator, the moment I click on one of the text fields, the keyboard extension arises from the bottom of the screen, although not the full keyboard, which never seems to show up in the simulator. But the following is printed out on the terminal:

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:0x6000034e7700 h=--& v=--& UIKeyboardAssistantBar:0x7f9c7d714af0.height == 0   (active)>",
"<NSLayoutConstraint:0x6000034aba20 V:|-(0)-[_UIUCBKBSelectionBackground:0x7f9c7d51ec70]   (active, names: '|':_UIButtonBarButton:0x7f9c7d51de40 )>",
"<NSLayoutConstraint:0x6000034aba70 _UIUCBKBSelectionBackground:0x7f9c7d51ec70.bottom == _UIButtonBarButton:0x7f9c7d51de40.bottom   (active)>",
"<NSLayoutConstraint:0x6000034fb3e0 V:|-(0)-[_UIButtonBarStackView:0x7f9c7d715880]   (active, names: '|':UIKeyboardAssistantBar:0x7f9c7d714af0 )>",
"<NSLayoutConstraint:0x6000034fb750 V:[_UIButtonBarStackView:0x7f9c7d715880]-(0)-|   (active, names: '|':UIKeyboardAssistantBar:0x7f9c7d714af0 )>",
"<NSLayoutConstraint:0x6000034abc00 'UIButtonBar.maximumAlignmentSize' _UIButtonBarButton:0x7f9c7d51de40.height == UILayoutGuide:0x600002ef4e00'UIViewLayoutMarginsGuide'.height   (active)>",
"<NSLayoutConstraint:0x6000034d7cf0 'UIView-bottomMargin-guide-constraint' V:[UILayoutGuide:0x600002ef4e00'UIViewLayoutMarginsGuide']-(9)-|   (active, names: '|':_UIButtonBarStackView:0x7f9c7d715880 )>",
"<NSLayoutConstraint:0x6000034d7c50 'UIView-topMargin-guide-constraint' V:|-(10)-[UILayoutGuide:0x600002ef4e00'UIViewLayoutMarginsGuide']   (active, names: '|':_UIButtonBarStackView:0x7f9c7d715880 )>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x6000034aba70 _UIUCBKBSelectionBackground:0x7f9c7d51ec70.bottom == _UIButtonBarButton:0x7f9c7d51de40.bottom   (active)>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.

It certainly appears to me that all this has to do with nothing in my app, and everything to do with how Apple is creating its own keyboard view, even with my small extension declared to be combined with it.

So the question remains, is there something I as an app developer am responsible for doing (on the presumption this is a bunch of stuff worth attending to) or is it just Apple's own problem/bug?

FWIW, this constraint problem message doesn't occur when simulating a newer iPad model, such as the iPad Pro 12.9-inch (3rd generation). But the message does show up when simulating an iPad Pro 9.7-inch". All claiming they're running iOS 12.1.

jsbox
  • 304
  • 2
  • 11
1

I am getting this same error, but only on a specific view, when I touch the first textfield, and then the next textfield down.

I am writing in SwiftUI for iOS 13.4

 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. 
    (
        "<NSLayoutConstraint:0x2809b6760 'assistantHeight' TUISystemInputAssistantView:0x105710da0.height == 44   (active)>",
        "<NSLayoutConstraint:0x2809ccff0 'assistantView.bottom' TUISystemInputAssistantView:0x105710da0.bottom == _UIKBCompatInputView:0x10525ae10.top   (active)>",
        "<NSLayoutConstraint:0x2809cccd0 'assistantView.top' V:|-(0)-[TUISystemInputAssistantView:0x105710da0]   (active, names: '|':UIInputSetHostView:0x105215010 )>",
        "<NSLayoutConstraint:0x2809ca300 'inputView.top' V:|-(0)-[_UIKBCompatInputView:0x10525ae10]   (active, names: '|':UIInputSetHostView:0x105215010 )>"
    )

    Will attempt to recover by breaking constraint 
    <NSLayoutConstraint:0x2809ccff0 'assistantView.bottom' TUISystemInputAssistantView:0x105710da0.bottom == _UIKBCompatInputView:0x10525ae10.top   (active)>

    Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
    The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
DckBrd
  • 33
  • 7
1

Basically, you just have to remove that constraint from the associated view. For instance, if is the height constraint giving warning, just remove it from your view; it will not affect the view.

0

One thing to watch out for (at least this tripped me up) was that I was removing the constraint from the wrong view. The constraint I was trying to remove was not a child constraint of my view so when I did

myView.removeConstraint(theConstraint)

it wasn't actually removing anything because I needed to call

myView.superView.removeConstraint(theConstraint)

since the constraint was technically sibling constraint of my view.

Adam Johns
  • 35,397
  • 25
  • 123
  • 176
0

I was also getting the same issue of breaking constraints in the log, for a viewCircle in the xib. I almost tried everything listed above and nothing was working for me. Then I tried to change the priority of the Height constraint which was breaking in the log(confirmed by adding an identifiers for the constraints on the xib)enter image description here

Mughal
  • 1
0

Xcode runtime warning

[LayoutConstraints] 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. 
(
    "<NSLayoutConstraint:0x600003235c70 'UISV-canvas-connection' V:[previousRoot]-(0)-|   (active, names: stackRoot:0x7fe3f44e0780, previousRoot:0x7fe3f44e9c10, '|':stackRoot:0x7fe3f44e0780 )>",
    "<NSLayoutConstraint:0x6000033cb660 'UISV-spacing' V:[serviceRoot]-(0)-[periodRoot]   (active, names: periodRoot:0x7fe3f44ea920, serviceRoot:0x7fe3f44e7db0 )>",
...
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x600003356080 serviceImageView.height == 32   (active, names: serviceImageView:0x7fe3f44e8190 )>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.

Currently(at least Xcode v14.2) it is simple to use Debug View Hierarchy

  • Start Debug View Hierarchy
  • Show the Debug navigator
  • Filter by address

Here you can simply select and review constraints

Some notes:

  • Use Editor -> Show Clipped Content[About]
  • UIStackView(UISV) constraints or some other cases can be fixed by putting UIStackView/view into container with one of constraint(e.g. bottom) with priority 999
yoAlex5
  • 29,217
  • 8
  • 193
  • 205