代码之家  ›  专栏  ›  技术社区  ›  user4487951

按语法添加NSLayoutConstraint时,会崩溃

  •  0
  • user4487951  · 技术社区  · 11 年前

    我有一个正在尝试应用的应用程序 NSLayoutConstraint 指向视图内的项目。这是我的代码:

    [customCell.infoView addConstraints:[NSLayoutConstraint 
              constraintsWithVisualFormat:@"H:|-0-[customCell.infoLabel]-0-|" 
             options:0 metrics:nil views:NSDictionaryOfVariableBindings(customCell.infoView)]];
    

    我不知道这意味着什么,但它因以下错误而崩溃:

    Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse constraint format: 
    customCell is not a key in the views dictionary. 
    H:|-0-[customCell.infoLabel]-0-| 
    

    以下是错误的屏幕截图:

    enter image description here

    注意infoLabel末尾的插入符号。

    是的,我确实有 customCell.m .(我使用了这个.m文件中的其他对象)。

    使现代化

    这是我插入的当前代码 自定义单元格.m awakeFromNib

    [self.contentView addConstraints:[NSLayoutConstraint
                                          constraintsWithVisualFormat:@"H:|[_infoLabel]|"
                                          options:0 metrics:nil views:NSDictionaryOfVariableBindings(_infoLabel)]];
    [self.contentView addConstraints:[NSLayoutConstraint
                                          constraintsWithVisualFormat:@"V:|[_infoLabel]|"
                                          options:0 metrics:nil views:NSDictionaryOfVariableBindings(_infoLabel)]];
    

    在上面的屏幕截图中,发生了同样的错误。

    更新2

    它现在崩溃,并出现以下错误:

    Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'NSDictionaryOfVariableBindings failed because either one of the values is nil, or there's something wrong with the way the macro is being invoked.  Cannot assign value nil for key "_infoLabel". Keys:(
    
        "_infoLabel"
    
    2 回复  |  直到 11 年前
        1
  •  0
  •   rdelmar    11 年前

    您的代码应该在自定义单元格的.m文件中,然后可以将该视图称为_infoView(您还在一个地方使用infoLabel,在另一个地方则使用infoView)。你的约束也是错误的。约束应该添加到infoView的超级视图,而不是infoView。您还需要一些垂直约束。

    [self.contentView addConstraints:[NSLayoutConstraint 
              constraintsWithVisualFormat:@"H:|[_infoLabel]|" 
             options:0 metrics:nil views:NSDictionaryOfVariableBindings(_infoLabel)]];
    
        2
  •  0
  •   joakim    11 年前

    这不是你的错。

    视图字典的工作方式有点奇怪;它将识别“.”作为keyPath。

    (丑陋的)解决方案:

    将customCell.infoView分配给另一个视图对象,并在视图字典中使用该对象,

    UIView newInfoView = customCell.infoView;