Когда я расширяю свой UIViewController, я получаю ошибку NSLayoutConstraint - PullRequest
0 голосов
/ 21 марта 2019

Когда я расширяю свой UIViewController и вызываю расширенный ViewController, я получаю: Завершение приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «NSLayoutConstraint for (null): ограничение должно содержать ошибку первого элемента макета».

 CGSize size = CGSizeMake(142, 200);
    [self.scrollView.subviews enumerateObjectsUsingBlock:^(UIView* subView, NSUInteger i, BOOL *stop) {
        subView.translatesAutoresizingMaskIntoConstraints = NO;
        [ViewHelper addWidthConstraint:subView width:size.width];
        [ViewHelper addHeightConstraint:subView height:size.height];
        if (i < self.scrollView.subviews.count - 1) {
            [ViewHelper addHorizontalConstraint:self.scrollView
                                     previouseView:subView
                                          nextView:(UIView*)self.scrollView.subviews[i + 1]
                                            spacer:8];
        }

        [ViewHelper addEdgeConstraint:NSLayoutAttributeTop
                               superview:self.scrollView
                                 subview:subView];

        [ViewHelper addEdgeConstraint:NSLayoutAttributeBottom
                               superview:self.scrollView
                                 subview:subView];

    }];

    [ViewHelper addEdgeConstraint:NSLayoutAttributeLeft
                           superview:self.scrollView
                             subview:self.scrollView.subviews.firstObject];

    [ViewHelper addEdgeConstraint:NSLayoutAttributeRight
                           superview:self.scrollView
                             subview:self.scrollView.subviews.lastObject];

    [ViewHelper addHeightConstraint:self.scrollView height:size.height];

Сбой в этой строке:

[ViewHelper addEdgeConstraint:NSLayoutAttributeLeft
                               superview:self.scrollView
                                 subview:self.scrollView.subviews.firstObject];

1 Ответ

1 голос
/ 22 марта 2019

Ошибка указывает на то, что вы пытаетесь добавить ограничение, используя представление с нулевым значением. Вы должны принять меры против того, чтобы self.scrollView.subviews.firstObject / lastObject был nil, прежде чем пытаться добавить к ним ограничения (убедившись, что scrollView имеет какие-либо подпредставления). Вот пример:

// make sure that the scrollView has some subviews before attempting to add layout constraints using the subviews
if ([self.scrollView.subviews count] > 0) {
    [ViewHelper addEdgeConstraint:NSLayoutAttributeLeft
                        superview:self.scrollView
                          subview:self.scrollView.subviews.firstObject];

    [ViewHelper addEdgeConstraint:NSLayoutAttributeRight
                        superview:self.scrollView
                          subview:self.scrollView.subviews.lastObject];
}
...