ios - 当我扩展我的 UIViewController 时,我收到 NSLayoutConstraint 错误

标签 ios objective-c nslayoutconstraint autolayout

当我扩展我的 UIViewController 并调用扩展的 ViewController 时,我得到:由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“NSLayoutConstraint for (null): Constraint must contain a first layout item”错误。

 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];

最佳答案

该错误表明您正在尝试使用为零的 View 添加约束。在尝试向 self.scrollView.subviews.firstObject/lastObject 添加约束之前,您应该防止 self.scrollView.subviews.firstObject/lastObject 为零(通过确保 ScrollView 具有任何 subview )。这是一个例子:

// 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];
}

关于ios - 当我扩展我的 UIViewController 时,我收到 NSLayoutConstraint 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55287750/

相关文章:

ios - 如何使用 sqlite 在 ios 应用程序中使用 "read commited"隔离级别?

ios - 在继续执行代码之前,如何检查 UIAlertController 是否已被解除?

ios - 在没有通知服务扩展的情况下显示推送通知角标(Badge)

ios - 使用 iOS 应用程序的 Objective-C 创建 MS Excel 类型的电子表格

ios - 单元格中的破坏约束

ios - 在运行时更改 AutoLayout 约束

ios - 我如何最好地存储图像以用作核心数据存储中的 UIImage?变形?二进制数据?

iOS 从解析和显示中获取数据

iphone - setNavigationBarHidden :NO Not Working after removeFromSuperview

cocoa - NSLayoutConstraint 将 centerX 约束到 super View 的另一侧