| – (20) –

当我在模拟器中按下Command + Y来显示“调用”状态栏时,我的应用程序会突破一个限制。 它只会在第一次出现呼入栏时发生。 一切看起来应该是这样,但日志打印出以下内容:

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:0x7fb4cb9b2b60 V:|-(20)-[UIInputSetContainerView:0x7fb4cb9b1190] (Names: '|':UITextEffectsWindow:0x7fb4cba003f0 )>", "<NSLayoutConstraint:0x7fb4cb942100 'UIInputWindowController-top' V:|-(0)-[UIInputSetContainerView:0x7fb4cb9b1190] (Names: '|':UITextEffectsWindow:0x7fb4cba003f0 )>" ) Will attempt to recover by breaking constraint <NSLayoutConstraint:0x7fb4cb9b2b60 V:|-(20)-[UIInputSetContainerView:0x7fb4cb9b1190] (Names: '|':UITextEffectsWindow:0x7fb4cba003f0 )> 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. 

这是UIViewAlertForUnsatisfiableConstraints中断时的调用堆栈:

 * thread #1: tid = 0x17582f, 0x0000000109bbb4c6 UIKit`UIViewAlertForUnsatisfiableConstraints, queue = 'com.apple.main-thread', stop reason = breakpoint 3.1 frame #0: 0x0000000109bbb4c6 UIKit`UIViewAlertForUnsatisfiableConstraints frame #1: 0x0000000109bbb8b2 UIKit`-[UIView(UIConstraintBasedLayout_EngineDelegate) engine:willBreakConstraint:dueToMutuallyExclusiveConstraints:] + 113 frame #2: 0x0000000107ea672b Foundation`-[NSISEngine handleUnsatisfiableRowWithHead:body:usingInfeasibilityHandlingBehavior:mutuallyExclusiveConstraints:] + 489 frame #3: 0x0000000107d07801 Foundation`-[NSISEngine fixUpValueRestrictionViolationsWithInfeasibilityHandlingBehavior:] + 613 frame #4: 0x0000000107d07537 Foundation`-[NSISEngine optimize] + 134 frame #5: 0x0000000107d07da4 Foundation`-[NSISEngine withBehaviors:performModifications:] + 245 frame #6: 0x0000000109bb5a4b UIKit`-[UIView(AdditionalLayoutSupport) _withAutomaticEngineOptimizationDisabledIfEngineExists:] + 58 frame #7: 0x0000000109bb658e UIKit`-[UIView(AdditionalLayoutSupport) updateConstraintsIfNeeded] + 254 frame #8: 0x0000000109ba6c46 UIKit`-[UIWindow(UIConstraintBasedLayout) updateConstraintsIfNeeded] + 108 frame #9: 0x0000000109bb72a3 UIKit`-[UIView(AdditionalLayoutSupport) _updateConstraintsAtEngineLevelIfNeeded] + 272 frame #10: 0x00000001093979b3 UIKit`-[UIView(Hierarchy) layoutBelowIfNeeded] + 845 frame #11: 0x000000010936eb8b UIKit`-[UIWindow handleStatusBarChangeFromHeight:toHeight:] + 1284 frame #12: 0x0000000109703b5b UIKit`-[UITextEffectsWindow handleStatusBarChangeFromHeight:toHeight:] + 100 * frame #13: 0x00000001093726a7 UIKit`+[UIWindow _noteStatusBarHeightChanged:oldHeight:forAutolayoutRootViewsOnly:] + 364 frame #14: 0x0000000109303a52 UIKit`-[UIApplication statusBar:willAnimateFromHeight:toHeight:duration:animation:] + 265 frame #15: 0x00000001099115bb UIKit`-[UIStatusBar _requestStyleAttributes:animationParameters:forced:] + 885 frame #16: 0x0000000109910fbf UIKit`-[UIStatusBar requestStyle:animationParameters:forced:] + 437 frame #17: 0x0000000109910d0d UIKit`-[UIStatusBar requestStyle:animated:forced:] + 90 frame #18: 0x00000001099160a6 UIKit`-[UIStatusBar statusBarServer:didReceiveStyleOverrides:] + 56 frame #19: 0x0000000109904b05 UIKit`_UIStatusBarReceivedStyleOverrides + 45 frame #20: 0x0000000109909058 UIKit`_XReceivedStyleOverrides + 33 frame #21: 0x0000000110d67fa8 AppSupport`migHelperRecievePortCallout + 208 frame #22: 0x000000010896c289 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 41 frame #23: 0x000000010896c1f9 CoreFoundation`__CFRunLoopDoSource1 + 473 frame #24: 0x0000000108961970 CoreFoundation`__CFRunLoopRun + 2272 frame #25: 0x0000000108960e08 CoreFoundation`CFRunLoopRunSpecific + 488 frame #26: 0x000000010e360ad2 GraphicsServices`GSEventRunModal + 161 frame #27: 0x00000001092f330d UIKit`UIApplicationMain + 171 frame #28: 0x00000001074e252f AppName`main(argc=1, argv=0x00007fff5872e688) + 111 at main.m:16 frame #29: 0x000000010aa6b92d libdyld.dylib`start + 1 frame #30: 0x000000010aa6b92d libdyld.dylib`start + 1 

你有什么想法为什么约束断裂? 我没有添加任何约束到UIInputSetContainerViewUITextEffectsWindowUIInputWindowController

编辑:我的问题已被标记为可能的重复,但我build议或同意在另一个问题中提供的答案 。 消除苹果自身的限制是非常危险的,只是为了摆脱这个警告。 我不会推荐这样做。 这就是为什么我也发现重复的标志是错误的( 这个问题以前已经被问过了,而且已经有了答案 ),因为答案不是我正在寻找的。

看起来这是一个苹果的错误。 你可以validation它发生在一个完全空的模板项目上:

  • 创build新的单一视图项目
  • 在iPhone模拟器上运行
  • 按Cmd-Y切换状态栏

你会看到约束中断。

雷达是我要说的路。

这显然是一个苹果的错误。 我的猜测是,他们有一个错误的约束,保持状态栏的高度在20像素,但在呼叫栏增长时被破坏。 这不会中断或影响应用程序,所以现在可以安全地忽略它。 但苹果雷达应该被填充。