我有一个应用程序,我正在尝试将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
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"
答案 0 :(得分:0)
这不是你的错。
视图字典的工作方式有点怪异;它会识别"。"作为keyPath。
(丑陋)解决方案:
将customCell.infoView分配给另一个视图对象并在视图字典中使用
即。 UIView newInfoView = customCell.infoView;
答案 1 :(得分:0)
您的代码应该位于自定义单元格的.m文件中,然后您可以将视图称为_infoView(您还在一个地方使用infoLabel而在另一个地方使用infoView)。你的约束也是错误的。约束应该添加到infoView的superview,而不是infoView。您还需要一些垂直约束。
[self.contentView addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"H:|[_infoLabel]|"
options:0 metrics:nil views:NSDictionaryOfVariableBindings(_infoLabel)]];