zoukankan      html  css  js  c++  java
  • setTranslatesAutoresizingMaskIntoConstraints和setFrame组合使用导致的异常

    在用Ojbect-c开发OSX应用的时候需要用到自定义控件并用代码进行布局,很自然地就使用了setTranslatesAutoresizingMaskIntoConstraints和setFrame组合,同时这个组合也很好的满足的需求。但是每当我先当前项目添加一个异常断点的时候,并开启调试程序,总是停在程序刚启动的main函数。经过debug发现是应为setTranslatesAutoresizingMaskIntoConstraints和setFrame组合导致了这个异常。

    代码

    [_programHeadView setTranslatesAutoresizingMaskIntoConstraints:YES];
    [_programHeadView setFrame:headRect];

    解决办法

    在调用setTranslatesAutoresizingMaskIntoConstraints和setFrame之前先把view从父view用移除,调用之后再添加回去这样就能避免当前view的constraints和默认的constraints产生冲突。

    [_programHeadView removeFromSuperview];
    [_programHeadView setTranslatesAutoresizingMaskIntoConstraints:YES];
    [_programHeadView setFrame:headRect];
    [[[self window] contentView] addSubview:_programHeadView];

    异常信息

    * thread #1: tid = 0x6931b, 0x00007fffb1b5745d libobjc.A.dylib`objc_exception_throw, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
      * frame #0: 0x00007fffb1b5745d libobjc.A.dylib`objc_exception_throw
        frame #1: 0x00007fff9cde1c3d CoreFoundation`+[NSException raise:format:] + 205
        frame #2: 0x00007fff9b2a7014 AppKit`LAYOUT_CONSTRAINTS_NOT_SATISFIABLE + 45
        frame #3: 0x00007fff9b2a717e AppKit`-[NSView(NSConstraintBasedLayout) engine:willBreakConstraint:dueToMutuallyExclusiveConstraints:] + 267
        frame #4: 0x00007fff9e994fea Foundation`-[NSISEngine handleUnsatisfiableRowWithHead:body:usingInfeasibilityHandlingBehavior:mutuallyExclusiveConstraints:] + 507
        frame #5: 0x00007fff9e996006 Foundation`-[NSISEngine tryUsingArtificialVariableToAddConstraintWithMarker:rowBody:usingInfeasibilityHandlingBehavior:mutuallyExclusiveConstraints:] + 482
        frame #6: 0x00007fff9e729325 Foundation`-[NSISEngine tryToAddConstraintWithMarker:expression:integralizationAdjustment:mutuallyExclusiveConstraints:] + 730
        frame #7: 0x00007fff9e99ea01 Foundation`-[NSLayoutConstraint _addLoweredExpression:toEngine:integralizationAdjustment:lastLoweredConstantWasRounded:mutuallyExclusiveConstraints:] + 281
        frame #8: 0x00007fff9e7207ac Foundation`-[NSLayoutConstraint _addToEngine:integralizationAdjustment:mutuallyExclusiveConstraints:] + 236
        frame #9: 0x00007fff9a822033 AppKit`-[NSView(NSConstraintBasedLayout) _layoutEngine_didAddLayoutConstraint:integralizationAdjustment:mutuallyExclusiveConstraints:] + 91
        frame #10: 0x00007fff9a7b68ba AppKit`-[NSView(NSConstraintBasedLayout) _constraints_didChangeAutoresizingConstraintsArrayForContainedView:] + 224
        frame #11: 0x00007fff9a83c3ed AppKit`-[NSView updateConstraints] + 139
        frame #12: 0x00007fff9a83bf27 AppKit`-[NSView _updateConstraintsForSubtreeIfNeededCollectingViewsWithInvalidBaselines:] + 989
        frame #13: 0x00007fff9a83bd31 AppKit`-[NSView _updateConstraintsForSubtreeIfNeededCollectingViewsWithInvalidBaselines:] + 487
        frame #14: 0x00007fff9a884c26 AppKit`__82-[NSView _updateConstraintsForSubtreeIfNeededCollectingViewsWithInvalidBaselines:]_block_invoke + 290
        frame #15: 0x00007fff9e726adb Foundation`-[NSISEngine withBehaviors:performModifications:] + 155
        frame #16: 0x00007fff9a83bc33 AppKit`-[NSView _updateConstraintsForSubtreeIfNeededCollectingViewsWithInvalidBaselines:] + 233
        frame #17: 0x00007fff9b059c84 AppKit`__46-[NSView _updateConstraintsForSubtreeIfNeeded]_block_invoke + 49
        frame #18: 0x00007fff9e726adb Foundation`-[NSISEngine withBehaviors:performModifications:] + 155
        frame #19: 0x00007fff9a7b5760 AppKit`-[NSView(NSConstraintBasedLayout) _withAutomaticEngineOptimizationDisabled:] + 70
        frame #20: 0x00007fff9b059a79 AppKit`-[NSView _updateConstraintsForSubtreeIfNeeded] + 224
        frame #21: 0x00007fff9b2acbb8 AppKit`-[NSWindow(NSConstraintBasedLayout) _updateConstraintsForEngineHostingViews:] + 76
        frame #22: 0x00007fff9a884a7a AppKit`__62-[NSWindow(NSConstraintBasedLayout) updateConstraintsIfNeeded]_block_invoke + 159
        frame #23: 0x00007fff9e726adb Foundation`-[NSISEngine withBehaviors:performModifications:] + 155
        frame #24: 0x00007fff9a7b5760 AppKit`-[NSView(NSConstraintBasedLayout) _withAutomaticEngineOptimizationDisabled:] + 70
        frame #25: 0x00007fff9a88496e AppKit`-[NSWindow(NSConstraintBasedLayout) updateConstraintsIfNeeded] + 245
        frame #26: 0x00007fff9a9248fb AppKit`___NSWindowGetDisplayCycleObserver_block_invoke + 73
        frame #27: 0x00007fff9a924831 AppKit`__37+[NSDisplayCycle currentDisplayCycle]_block_invoke + 622
        frame #28: 0x00007fffa2802dc6 QuartzCore`CA::Transaction::run_commit_handlers(CATransactionPhase) + 46
        frame #29: 0x00007fffa290c8f0 QuartzCore`CA::Context::commit_transaction(CA::Transaction*) + 160
        frame #30: 0x00007fffa28018a1 QuartzCore`CA::Transaction::commit() + 475
        frame #31: 0x00007fff9ac07b99 AppKit`__37+[NSDisplayCycle currentDisplayCycle]_block_invoke.31 + 323
        frame #32: 0x00007fff9ccf8dd7 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
        frame #33: 0x00007fff9ccf8d47 CoreFoundation`__CFRunLoopDoObservers + 391
        frame #34: 0x00007fff9ccd9789 CoreFoundation`__CFRunLoopRun + 873
        frame #35: 0x00007fff9ccd91c4 CoreFoundation`CFRunLoopRunSpecific + 420
        frame #36: 0x00007fff9c23aebc HIToolbox`RunCurrentEventLoopInMode + 240
        frame #37: 0x00007fff9c23abf9 HIToolbox`ReceiveNextEventCommon + 184
        frame #38: 0x00007fff9c23ab26 HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter + 71
        frame #39: 0x00007fff9a7d5e24 AppKit`_DPSNextEvent + 1120
        frame #40: 0x00007fff9af5185e AppKit`-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 2796
        frame #41: 0x00007fff9a7ca7ab AppKit`-[NSApplication run] + 926
        frame #42: 0x00007fff9a7951de AppKit`NSApplicationMain + 1237
  • 相关阅读:
    Python列表去重的三种方法
    关于Python的 a, b = b, a+b
    Python爬取B站视频信息
    Linux文件管理命令
    (一)MySQL学习笔记
    Linux特殊字符含义
    在父容器div中图片下方有一条空隙问题
    对Json的各种遍历方法
    for循环使用append问题
    IE兼容性
  • 原文地址:https://www.cnblogs.com/keitsi/p/7306541.html
Copyright © 2011-2022 走看看