Autolayout Constraint单个约束时出错

时间:2013-02-03 18:37:36

标签: iphone xcode ios6 autolayout nslayoutconstraint

我有一堆标签和按钮。当你点击一个按钮时,一个视图从底部向上滑动,其中有控件,这是一种键盘。它看起来像这样:

 -----------------------------
|                             |
|  [Button 1] [  Slider 1  ]  |
|                             |
|  [Button 2] [  Slider 2  ]  |
|                             |
 -----------------------------

这个“键盘”是在视图加载并且动画完成时将其高度从0切换到其内在内容大小的最开始创建的。这个escene只支持横向模式,当设备旋转180度时,我花了很长时间才能将“键盘”保持在视图上。

我看到的问题突然出现以下两种情况之一:

  1. 设备旋转180度。
  2. 调用“键盘”。
  3. 此问题如下:

    Unable to simultaneously satisfy constraints...
    .
    .
    .
    .
    (
        "<NSLayoutConstraint:0x718c6c0 UIButton:0x717e0d0.centerY == UISlider:0x717d9d0.centerY>",
        "<NSLayoutConstraint:0x7190a00 UIButton:0x717e0d0.centerY == UISlider:0x717d9d0.centerY>"
    )
    

    错误日志两次给我这个错误,每组按钮滑块一次。

    我认为奇怪的是冲突的约束完全相同。我以为我做了一些复制粘贴错误并且两次添加了相同的约束,但事实并非如此。

    我猜这与在旋转时调用updateViewConstraints以及我执行动画时有关,但我不明白为什么只有这些约束受到影响,因为在这个“键盘”视图中还有更多。

    总而言之,这种Autolayout比苹果公司要求的要困难得多。在我看来,当然。

    有什么想法吗?

    编辑:主要使用可视语言格式在代码中设置约束。我相信“键盘”中控件的约束被添加到“键盘”视图中,这是正常的事情。

    为了尝试一下,我改变了有问题的约束,而不是将它们添加到“键盘”子视图中,我将它们添加到self.view(“键盘”superview)。突然之间,没有出现更多的错误。

    尽管如此,我真的很喜欢这个问题的一些讨论,因为我仍然不知道什么是错的,我只是幸运的一击。我真的很想解决它。

2 个答案:

答案 0 :(得分:2)

冲突约束完全相同的事实实际上是错误。使用自动布局,您不能有两次约束。这将产生您在上面看到的错误。

当然,您已经添加了两次约束。您可以从内存地址中看到这一点。您有两个不同的NSLayoutConstraint个实例,0x718c6c00x7190a00。但是,每个引用的实例都是相同的。这就是centerY实例UIButton的垂直中心0x717e0d0应位于UISlider 0x717d9d0的中间位置。

可能已经调用了您的updateConstraints方法,并且在再次添加之前您尚未检查是否已存在约束。

答案 1 :(得分:1)

我不知道这是否对您有所帮助,但我只是使用this tutorial来设置我应用中按钮和标签的约束

相关问题