以编程方式添加 NSLayoutConstraint,崩溃

Adding an NSLayoutConstraint prgrammatically, crashes

我有一个应用程序,我在其中尝试将 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-| 

错误截图如下:

注意 infoLabel 末尾的插入符号。

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

更新

这是我在 customCell.m at 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"

这不是你的错。

视图字典的工作方式有点奇怪;它会识别“。”作为关键路径。

(丑陋的)解决方案:

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

UIView newInfoView = customCell.infoView;

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

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