动态调整视图大小(拖动运动)时自动布局约束中断

Posted

技术标签:

【中文标题】动态调整视图大小(拖动运动)时自动布局约束中断【英文标题】:Auto layout constraint breaks when resizing view dynamically (dragging motion) 【发布时间】:2015-05-11 14:23:45 【问题描述】:

我有一个视图夹在另外两个视图之间,中间视图的高度可以通过平移手势来改变。

我正在使用手势识别器来获取触摸位置并将该值提供给中间视图的高度约束以使其动态调整大小。

一个问题是当触摸位置超出中间视图的边界并与顶视图或底视图重叠时,我会收到警告:

无法同时满足约束...

将尝试通过打破约束来恢复

这并没有真正引起任何实际问题,但以防万一它可能会导致大问题,我想知道是否

a) 使用高度约束来动态改变高度是正确的 b) 有任何方法可以避免记录该警告

谢谢!

【问题讨论】:

你能发布约束的整个错误输出吗?也许在您调整大小的过程中,大小变得小于零,这就是它崩溃的原因 调整大小确实得到一个负值。该应用程序没有崩溃,但我只是收到一个警告,我担心它可能会导致意外问题。我在两种情况下收到警告:当高度约束的常量值为负数时,以及当它导致底部视图的高度变为负数时。但是无论如何用户都应该能够调整大小,所以我只需要运行它吗? 【参考方案1】:

回答你的问题:

a) 是的,这是更新视图高度的正确方法

b) 是的,有办法消除警告

由于您的视图的高度约束为负值,您可以添加对高度的检查,这样您就永远不会为其设置负值。然后,您将不再有错误日志。

不确定您是否也支持 ios 7,但如果支持,应用程序很可能会因为布局错误而崩溃。

因此,我的建议是在您要更新约束的位置添加类似这样的内容:

[self.heightConstraint setConstant:MAX(0, value)];

祝你的项目好运!

【讨论】:

以上是关于动态调整视图大小(拖动运动)时自动布局约束中断的主要内容,如果未能解决你的问题,请参考以下文章

使用自动布局约束动态调整表格视图单元格的大小

iOS 8 自动布局 - 动态调整 4 个方形视图的大小

自动布局 - 定义应该改变哪个约束首先调整它的大小

UIImageview 在自动布局上调整大小

使用自动布局时标签不会调整大小,情节提要中的约束

启用自动布局的 iOS 调整视图大小