更改宽度约束可防止视图从对齐到Superview的尾随边距

时间:2016-12-06 01:53:21

标签: autolayout interface-builder xcode8 nslayoutconstraint uicontainerview

首先,我必须提到我在一个新项目中重复了约束并且无法复制问题。问题出现在我已经工作了几个月的复杂故事板项目中。

为简单起见,这基本上就是问题:

我在View Controller内部的默认View中有一个Container View。容器视图对其超级视图的顶部,底部和尾部边缘有约束。我在superview和容器视图之间连接了两个“相等宽度”约束。一个等于superview,另一个与superview成比例,约束中有0.9乘数。

我有一个叠加在容器视图顶部的按钮,它在2个“相等/比例宽度”之间交替显示(为了简单起见,我当前删除了View Controller中的所有其他对象,试图找出什么是导致问题...

当按钮将“等宽”约束切换到0.9比例宽度约束时,它会“推动”容器视图远离尾缘(12点),同时它还将容器视图缩小10%,如期望的。

我一直在努力工作几个小时,到目前为止无济于事......出于绝望,我添加了一个额外的后缘限制来打开和关闭,额外的12点来补偿当时的转变比例宽度打开。默认尾随(超级视图)约束设置为-20,因为我将它增加到-30,-31,-31.5它越来越接近向右看,但是当我把它设为常数-32时,它再次跳起,大约12到20点,落后于边缘!我知道这不是一个试图解决这个问题的好方法,但我想提一下,以防它可能是一个比我更了解的问题的线索。

感谢您提供的任何帮助!

更新:

问题似乎源于容器视图中嵌入的VC中的冲突。嵌入式VC的高度是720,而它的容器是720 ......但即使我改变这些高度以匹配,无论哪种方式,我都会遇到同样的问题......

如果我删除嵌入式VC并只使用容器视图,问题似乎就消失了,但这不是解决方案,因为我需要嵌入式VC的内容......

最后一点,我有一个类似的方法,按下按钮可以改变嵌入式VC的高度,但没有问题..

2 个答案:

答案 0 :(得分:0)

之前我遇到类似的约束问题,没有看到故事板,我无法确定原因,但您可以尝试以下方法:

  • 仔细检查您的约束是否与您的代码相关联,即使它们不是代码也会编译并运行但没有效果。
  • 查看自动布局中断约束的日志,可能存在另一个约束,使您的视图保持原位,导致新激活的约束被破坏。

如果两者都不是原因,还要检查按钮是否正在调用正确的操作。

在任何情况下,如果我的提示完全无效,您可能需要提供更多信息或屏幕上限,以显示视图及其限制,以便更好地了解您的问题。

答案 1 :(得分:0)

我解决了!

因此,正如我在更新中所怀疑的那样,问题源于容器视图与其嵌入式视图控制器之间的约束不同步的问题。在容器视图中,如上所述,对于superview的后缘有一个约束,对于我用一个按钮切换的宽度有2。嵌入式视图控制器的视图对其超级视图有一个主要的约束。一旦我删除了它并将其切换为尾随视图,问题就解决了!

获得的经验:如果要更改具有多个宽度或高度约束的容器视图,请确保在容器视图和嵌入视图的内容中具有相同的侧边约束(y轴,顶部或尾部的顶部或底部)对于x轴)。