【问题标题】: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)

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

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

有什么想法吗?

【问题讨论】:

    标签: ios swift uiview autolayout constraints


    【解决方案1】:

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

    self.view.addConstraint(newConstraint)
    

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-06
        • 2015-04-30
        • 1970-01-01
        • 1970-01-01
        • 2018-08-01
        • 1970-01-01
        相关资源
        最近更新 更多