AutoLayout崩溃:位置锚点需要配对

Viv*_*ive 8 crash objective-c ios autolayout

该应用程序正在崩溃Location anchors require being paired..我想修复它,但无论我用这个视图手动测试应用程序多少次,我都没遇到过崩溃(只登录Crashlytics).任何人都知道这里可能出现什么问题,在什么情况下可能会发生崩溃?

该属性centerYConstraint是必需的,因为稍后它允许用户向上/向下移动视图.

部分MyView.m文件.崩溃发生在设置上self.centerYConstraint.

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    self.centerYConstraint = [self.view.centerYAnchor constraintEqualToAnchor:self.parentViewController.view.centerYAnchor 
                                                      constant:self.view.center.y - self.parentViewController.view.center.y];
    self.centerYConstraint.active = YES;
}
Run Code Online (Sandbox Code Playgroud)

崩溃日志:

Fatal Exception: NSInvalidArgumentException
NSLayoutConstraint for <NSLayoutYAxisAnchor:0x16764ae0 "MyView:0x18e6b900.centerY">: 
A constraint cannot be made from <NSLayoutYAxisAnchor:0x16764ae0 "MyView:0x18e6b900.centerY"> to a constant. 
Location anchors require being paired.
Run Code Online (Sandbox Code Playgroud)

Asp*_*eri 2

此异常发生在constraintEqualToAnchor:self.parentViewController.view.centerYAnchorGives时nil,也可能是self.parentViewController.view在 isnil或self.parentViewControlleris时nil。

所有层次结构逻辑从描述中并不清晰,但以下确实解决了问题(假设超级视图是父控制器的视图,否则应该添加更多条件)。

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    self.centerYConstraint = [self.view.centerYAnchor constraintEqualToAnchor:self.superview.centerYAnchor 
                                                      constant:self.view.center.y - self.superview.center.y];
    self.centerYConstraint.active = YES;
}
Run Code Online (Sandbox Code Playgroud)