我通过UIViewController中的代码添加了约束。我还尽可能将translatesAutoresizingMaskIntoConstraints
设置为false
。尽管如此,由于内部一致性,该应用仍然崩溃并显示异常。
这是设计和添加约束的代码,这会导致异常:
head = UIView.init()
head?.backgroundColor = UIColor.cyan
self.view.addSubview(head!)
self.view.translatesAutoresizingMaskIntoConstraints = false
head?.translatesAutoresizingMaskIntoConstraints = false
head?.leadingAnchor.constraint(equalTo: self.view.layoutMarginsGuide.leadingAnchor).isActive = true
head?.topAnchor.constraint(equalTo: self.view.layoutMarginsGuide.topAnchor).isActive = true
head?.trailingAnchor.constraint(equalTo: self.view.layoutMarginsGuide.trailingAnchor).isActive = true
head?.heightAnchor.constraint(equalToConstant: 44).isActive = true
我没有使用任何情节提要,因此在Xcode中,在项目的常规设置中,主界面变为空白。使用调用堆栈的完整崩溃日志--->
2019-03-13 11:44:09.032181+0530 codeUIDesign[2645:107166] *** Assertion failure in -[UIView _nsis_center:bounds:inEngine:forLayoutGuide:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKitCore_Sim/UIKit-3698.93.8/NSLayoutConstraint_UIKitAdditions.m:3588
2019-03-13 11:44:09.037194+0530 codeUIDesign[2645:107166] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Error in compatibility flow'
*** First throw call stack:
(
0 CoreFoundation 0x00000001119e41bb __exceptionPreprocess + 331
1 libobjc.A.dylib 0x0000000110027735 objc_exception_throw + 48
2 CoreFoundation 0x00000001119e3f42 +[NSException raise:format:arguments:] + 98
3 Foundation 0x000000010fa2a877 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 194
4 UIKitCore 0x000000011478a35b -[UIView(AdditionalLayoutSupport) _nsis_center:bounds:inEngine:forLayoutGuide:] + 2454
5 UIKitCore 0x0000000114798ee9 -[UILayoutGuide _updateLayoutFrameInOwningView:fromEngine:] + 74
6 UIKitCore 0x0000000114788c5a -[UIView(AdditionalLayoutSupport) _is_layout] + 376
7 UIKitCore 0x0000000114843c66 -[UIView(Hierarchy) _updateConstraintsAsNecessaryAndApplyLayoutFromEngine] + 1002
8 UIKitCore 0x0000000114858795 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1441
9 QuartzCore 0x0000000115de0b19 -[CALayer layoutSublayers] + 175
10 QuartzCore 0x0000000115de59d3 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 395
11 QuartzCore 0x0000000115de0a40 -[CALayer layoutIfNeeded] + 187
12 UIKitCore 0x0000000113d70ed4 -[UIViewController window:willAnimateRotationToInterfaceOrientation:duration:] + 658
13 UIKitCore 0x00000001143b465f -[UIWindow _setRotatableClient:toOrientation:updateStatusBar:duration:force:isRotating:] + 5605
14 UIKitCore 0x00000001143b21c7 -[UIWindow _setRotatableViewOrientation:updateStatusBar:duration:force:] + 123
15 UIKitCore 0x00000001143a7514 -[UIWindow _setHidden:forced:] + 716
16 UIKitCore 0x00000001143ba5c0 -[UIWindow makeKeyAndVisible] + 42
17 codeUIDesign 0x000000010f7000c8 $S12codeUIDesign11AppDelegateC11application_29didFinishLaunchingWithOptionsSbSo13UIApplicationC_SDySo0k6LaunchJ3KeyaypGSgtF + 1128
18 codeUIDesign 0x000000010f7002c4 $S12codeUIDesign11AppDelegateC11application_29didFinishLaunchingWithOptionsSbSo13UIApplicationC_SDySo0k6LaunchJ3KeyaypGSgtFTo + 228
19 UIKitCore 0x0000000114365bde -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 280
20 UIKitCore 0x00000001143675cb -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 3979
21 UIKitCore 0x000000011436cc2f -[UIApplication _runWithMainScene:transitionContext:completion:] + 1623
22 UIKitCore 0x0000000113b8b4e9 __111-[__UICanvasLifecycleMonitor_Compatability _scheduleFirstCommitForScene:transition:firstActivation:completion:]_block_invoke + 866
23 UIKitCore 0x0000000113b9429c +[_UICanvas _enqueuePostSettingUpdateTransactionBlock:] + 153
24 UIKitCore 0x0000000113b8b126 -[__UICanvasLifecycleMonitor_Compatability _scheduleFirstCommitForScene:transition:firstActivation:completion:] + 233
25 UIKitCore 0x0000000113b8bae0 -[__UICanvasLifecycleMonitor_Compatability activateEventsOnly:withContext:completion:] + 1085
26 UIKitCore 0x0000000113b89cb5 __82-[_UIApplicationCanvas _transitionLifecycleStateWithTransitionContext:completion:]_block_invoke + 795
27 UIKitCore 0x0000000113b8995f -[_UIApplicationCanvas _transitionLifecycleStateWithTransitionContext:completion:] + 435
28 UIKitCore 0x0000000113b8ea90 __125-[_UICanvasLifecycleSettingsDiffAction performActionsForCanvas:withUpdatedScene:settingsDiff:fromSettings:transitionContext:]_block_invoke + 584
29 UIKitCore 0x0000000113b8f80e _performActionsWithDelayForTransitionContext + 100
30 UIKitCore 0x0000000113b8e7ef -[_UICanvasLifecycleSettingsDiffAction performActionsForCanvas:withUpdatedScene:settingsDiff:fromSettings:transitionContext:] + 221
31 UIKitCore 0x0000000113b9393a -[_UICanvas scene:didUpdateWithDiff:transitionContext:completion:] + 392
32 UIKitCore 0x000000011436b44e -[UIApplication workspace:didCreateScene:withTransitionContext:completion:] + 515
33 UIKitCore 0x0000000113f0fd09 -[UIApplicationSceneClientAgent scene:didInitializeWithEvent:completion:] + 357
34 FrontBoardServices 0x000000011cb602da -[FBSSceneImpl _didCreateWithTransitionContext:completion:] + 448
35 FrontBoardServices 0x000000011cb6b443 __56-[FBSWorkspace client:handleCreateScene:withCompletion:]_block_invoke_2 + 271
36 FrontBoardServices 0x000000011cb6ab3a __40-[FBSWorkspace _performDelegateCallOut:]_block_invoke + 53
37 libdispatch.dylib 0x0000000112e07602 _dispatch_client_callout + 8
38 libdispatch.dylib 0x0000000112e0ab78 _dispatch_block_invoke_direct + 301
39 FrontBoardServices 0x000000011cb9fba8 __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 30
40 FrontBoardServices 0x000000011cb9f860 -[FBSSerialQueue _performNext] + 457
41 FrontBoardServices 0x000000011cb9fe40 -[FBSSerialQueue _performNextFromRunLoopSource] + 45
42 CoreFoundation 0x0000000111949721 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
43 CoreFoundation 0x0000000111948f93 __CFRunLoopDoSources0 + 243
44 CoreFoundation 0x000000011194363f __CFRunLoopRun + 1263
45 CoreFoundation 0x0000000111942e11 CFRunLoopRunSpecific + 625
46 GraphicsServices 0x00000001185541dd GSEventRunModal + 62
47 UIKitCore 0x000000011436e81d UIApplicationMain + 140
48 codeUIDesign 0x000000010f7009c7 main + 71
49 libdyld.dylib 0x0000000112e7d575 start + 1
50 ??? 0x0000000000000001 0x0 + 1
)
我尝试使用与我在XCode版本10.0(10A255)中发布有问题的相同代码,但工作正常,但在XCode版本10.1(10B61)中显示崩溃。
答案 0 :(得分:3)
您需要在head
视图中添加它:
head.translatesAutoresizingMaskIntoConstraints = false
然后删除这一行:
self.view.translatesAutoresizingMaskIntoConstraints = false
所以您的代码如下:
let head = UIView()
head.backgroundColor = UIColor.cyan
self.view.addSubview(head)
// This new line added
head.translatesAutoresizingMaskIntoConstraints = false
head.leadingAnchor.constraint(equalTo: self.view.layoutMarginsGuide.leadingAnchor).isActive = true
head.topAnchor.constraint(equalTo: self.view.layoutMarginsGuide.topAnchor).isActive = true
head.trailingAnchor.constraint(equalTo: self.view.layoutMarginsGuide.trailingAnchor).isActive = true
head.heightAnchor.constraint(equalToConstant: 44).isActive = true
答案 1 :(得分:0)
您忘记给框架打个招呼。试试这个:
class ViewController: UIViewController {
private var head: UIView!
override func viewDidLoad() {
super.viewDidLoad()
setup()
}
private func setup() {
head = UIView(frame: .zero)
head.translatesAutoresizingMaskIntoConstraints = false
head.backgroundColor = .red
self.view.addSubview(head)
head.leftAnchor.constraint(equalTo: self.view.leftAnchor, constant: 16).isActive = true
head.rightAnchor.constraint(equalTo: self.view.rightAnchor, constant: -16).isActive = true
head.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 16).isActive = true
head.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: -16).isActive = true
}
}
答案 2 :(得分:-1)
我已经尝试过此代码,并且在我这一方面工作得很好。请检查:
var head: UIView? = nil
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
head = UIView.init()
head?.backgroundColor = UIColor.cyan
self.view.addSubview(head!)
head?.translatesAutoresizingMaskIntoConstraints = false
head?.leadingAnchor.constraint(equalTo: self.view.layoutMarginsGuide.leadingAnchor).isActive = true
head?.topAnchor.constraint(equalTo: self.view.layoutMarginsGuide.topAnchor).isActive = true
head?.trailingAnchor.constraint(equalTo: self.view.layoutMarginsGuide.trailingAnchor).isActive = true
head?.heightAnchor.constraint(equalToConstant: 44).isActive = true
}
不要写此行,您不需要:
self.view.translatesAutoresizingMaskIntoConstraints = false