找不到属性的相关边

Posted

技术标签:

【中文标题】找不到属性的相关边【英文标题】:Could not find relevant edges for attributes 【发布时间】:2017-07-13 16:48:41 【问题描述】:

我收到以下错误:

无法解析约束的符号常量,因为:无法 找到属性的相关边:centerX 和 centerX。

使用符号 断点在 NSLayoutConstraintFailedToFindDefaultResolvedValueForSymbolicConstant 调试。

如果我在 NSLayoutConstraintFailedToFindDefaultResolvedValueForSymbolicConstant 添加断点,它将停在这一行:

[self.customNavigationBar.widthAnchor constraintEqualToAnchor:self.view.widthAnchor].active = YES;

这一行在视图控制器的viewDidLoad 中被调用。 customNavigationBar 是一个从 nib 加载的 UIView,它已经作为子视图添加到 self.view

如果我尝试打印出我正在使用的锚点,一切似乎都正常:

(lldb) po self.customNavigationBar.widthAnchor
<NSLayoutDimension:0x17446cc80 "UIView:0x10115c160.width">

(lldb) po self.view.widthAnchor
<NSLayoutDimension:0x170667080 "UIView:0x1012ae550.width">

【问题讨论】:

什么是customNavigationBar?它是作为子视图添加到self.viewUINavigationBar 吗?还是它是一个子类控制器? 这是一个从 nib 加载的 UIView,请参阅已编辑的问题。 只是为了缩小范围...如果您注释掉该行,您还会收到错误吗?如果是这样,在类似的路线上?如果是这样,如果您不对customNavigationBar 设置任何约束,您能否让它运行而不会出错? (我知道它不会在正确的地方,但只是调试......) 您最终解决了这个问题吗?我自己现在也遇到了这个问题,并且将在早上挖掘原因。谢谢 没有,但我也没有深入研究。 【参考方案1】:

此错误来自您为 NSLayoutConstraint 选择的构造函数。

你可能有这样的事情:

view.topAnchor.constraint(equalToSystemSpacingBelow: otherView.centerYAnchor, multiplier: 0.25).isActive = true

但你应该这样构造它:

let constraint = NSLayoutConstraint(item: view, attribute: .top, relatedBy: .equal, toItem: otherView, attribute: .centerY, multiplier: 0.25, constant: 1)

constraint.isActive = true

【讨论】:

为什么初始化器的选择在这里很重要?这两个选项有什么区别? 这里的区别在于 NSLayoutAnchor api(微妙地)在这里没有任何意义。我们正在使用equalToSystemSpacingBelow,但中心没有 SystemSpacing。将其更改为view.topAnchor.constraint(equalTo: otherView.centerYAnchor, multiplier: 0.25).isActive = true,错误就会消失。 @alexkent - multiplier 不是 equalTo 约束的有效参数。要么没什么,要么你可以使用constant @C6Silver 你当然是对的。谢谢指正。

以上是关于找不到属性的相关边的主要内容,如果未能解决你的问题,请参考以下文章

Spring Data JPA - “找不到类型的属性”异常

在前向类对象“CALayer”中找不到属性“cornerRadius”

在现有文件上设置属性时出现错误“找不到路径的一部分”

解决windows下安装MySQL后,在服务找不到其相关信息的问题

unity Camera.main.X找不到

Angular 7:“找不到具有未指定名称属性的控件”