找不到属性的相关边
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.view
的UINavigationBar
吗?还是它是一个子类控制器?
这是一个从 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”