无法将顶部约束添加到视图

Posted

技术标签:

【中文标题】无法将顶部约束添加到视图【英文标题】:Cannot add top constraint to a view 【发布时间】:2016-01-29 15:36:32 【问题描述】:

我正在尝试以这种方式向图像视图和超级视图添加约束:

let newConstraint = NSLayoutConstraint(
  item: self.image, 
  attribute: NSLayoutAttribute.Top, 
  relatedBy: NSLayoutRelation.Equal, 
  toItem: self.topLayoutGuide, 
  attribute: NSLayoutAttribute.Bottom, 
  multiplier: 1, 
  constant: 200)
image.addConstraint(newConstraint)

当我运行我的应用程序时,它会因以下输出而崩溃:

无法在视图上安装约束。约束是否引用了视图子树之外的内容?这是违法的。

有什么想法吗?

【问题讨论】:

【参考方案1】:

将约束添加到self.view 而不是self.image

self.view.addConstraint(newConstraint)

self.topLayoutGuideself.view 的子元素,而不是self.image。正如错误所说,从安装约束的视图的子树外部引用约束是非法的。

换句话说,self.imageself.topLayoutGuide 是视图层次结构中的兄弟姐妹,您必须将约束添加到这些兄弟姐妹的“父亲”(self.view)。

【讨论】:

【参考方案2】:

对于那些对 Interface Builder (StoryBoard) 解决方案感兴趣的人:

如果顶部/底部约束无法添加/编辑,如图所示。

首先,在“导航到相关项目”窗格中选择您希望添加这些约束的项目,然后 CTRL 将其单击到视图中的附近项目,并将其顶部/底部任意约束到该项目。

这会创建一个您原本无法添加的约束,您现在可以找到它,并打开属性检查器进行编辑;因此,任意初始选择。

虽然这似乎只在您的视图包含您能够毫无问题地约束的其他项目时才有效,因为添加此约束将取决于至少一个已经存在的约束。

【讨论】:

以上是关于无法将顶部约束添加到视图的主要内容,如果未能解决你的问题,请参考以下文章

UIView 上的顶部空间约束,而不是 UIImag

将视图的顶部和底部约束到相同的准则以集中它,它应该工作吗?

自动布局不会减少顶部约束

iOS - 查找视图的顶部约束?

ScrollView 在子视图 xcode 6 Swift 的顶部添加空间

以编程方式将约束添加到相对于同级的视图