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)。您不能只获取视图控制器的视图并将其插入您的界面。您必须充当父视图控制器。你没有那样做。这是违法的。