updateViewConstraints 给出 "Impossible to set up layout with view hierarchy unprepared for constraint"
updateViewConstraints gives "Impossible to set up layout with view hierarchy unprepared for constraint"
我有一个视图控制器,它在 ViewDidLoad 中初始化一个子视图控制器。
- (void)viewDidLoad {
mapVC = [[CollectionMapViewController alloc] init];
}
然后将此 VC 添加为 IBAction 方法中的子视图:
- (IBAction)left_seg1:(id)sender {
[mapVC layoutMapView];
[self.view addSubview:mapVC.view];
NSLog(@"num 1");
_tagTwo = 3;
return;
}
我正在尝试为子视图创建相对于其父视图的约束。在尝试这样做时,我已将 updateViewConstraints 添加到父 class.
- (void)updateViewConstraints{
self.view.translatesAutoresizingMaskIntoConstraints = NO;
mapVC.view.translatesAutoresizingMaskIntoConstraints = NO;
NSLayoutConstraint* trailConstrain=[NSLayoutConstraint constraintWithItem:mapVC.view attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:10];
NSLayoutConstraint* leadingConstrain=[NSLayoutConstraint constraintWithItem:mapVC.view attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1.0 constant:10];
[self.view addConstraints:@[trailConstrain, leadingConstrain]];
}
但是,这会生成以下运行时异常:
Assertion failure in -[UIView _layoutEngine_didAddLayoutConstraint:
roundingAdjustment:mutuallyExclusiveConstraints:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3600.7.47/NSLayoutConstraint_UIKitAdditions.m:649
**Impossible to set up layout with view hierarchy unprepared for constraint**
我查看了其他线程,问题是他们在 viewDidLoad
中设置了约束,但我没有这样做。
(1) Never never never never call viewDidLoad
.这不是您的调用方法。立即删除该行。
(2) 你的代码的问题是你不知道它什么时候会被调用。添加检查以确保 mapVC.view
在您的界面中;如果没有,请不要 运行 该代码。
(3)。您不能只获取视图控制器的视图并将其插入您的界面。您必须充当父视图控制器。你没有那样做。这是违法的。
我有一个视图控制器,它在 ViewDidLoad 中初始化一个子视图控制器。
- (void)viewDidLoad {
mapVC = [[CollectionMapViewController alloc] init];
}
然后将此 VC 添加为 IBAction 方法中的子视图:
- (IBAction)left_seg1:(id)sender {
[mapVC layoutMapView];
[self.view addSubview:mapVC.view];
NSLog(@"num 1");
_tagTwo = 3;
return;
}
我正在尝试为子视图创建相对于其父视图的约束。在尝试这样做时,我已将 updateViewConstraints 添加到父 class.
- (void)updateViewConstraints{
self.view.translatesAutoresizingMaskIntoConstraints = NO;
mapVC.view.translatesAutoresizingMaskIntoConstraints = NO;
NSLayoutConstraint* trailConstrain=[NSLayoutConstraint constraintWithItem:mapVC.view attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:10];
NSLayoutConstraint* leadingConstrain=[NSLayoutConstraint constraintWithItem:mapVC.view attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1.0 constant:10];
[self.view addConstraints:@[trailConstrain, leadingConstrain]];
}
但是,这会生成以下运行时异常:
Assertion failure in -[UIView _layoutEngine_didAddLayoutConstraint:
roundingAdjustment:mutuallyExclusiveConstraints:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3600.7.47/NSLayoutConstraint_UIKitAdditions.m:649
**Impossible to set up layout with view hierarchy unprepared for constraint**
我查看了其他线程,问题是他们在 viewDidLoad
中设置了约束,但我没有这样做。
(1) Never never never never call viewDidLoad
.这不是您的调用方法。立即删除该行。
(2) 你的代码的问题是你不知道它什么时候会被调用。添加检查以确保 mapVC.view
在您的界面中;如果没有,请不要 运行 该代码。
(3)。您不能只获取视图控制器的视图并将其插入您的界面。您必须充当父视图控制器。你没有那样做。这是违法的。