以编程方式添加 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)]];
我有一个应用程序,我在其中尝试将 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)]];