逻辑错误只是bug。在某个地方,你有一个错误的假设。也许这是一个关于自动布局如何计算视图的假设。也许它是关于你所创建的约束集的假设,或者是你所设置的视图属性,也许它是关于约束如何相互作用来创建复杂行为的假设。不管怎样,某些地方的某些东西并不完全符合你的思维模式。
逻辑错误是最难发现的。在排除了所有其他可能性之后,无论剩下的是什么,无论多么不可思议,都必须是一个逻辑错误。然而,即使您已经确定您有一个错误,您仍然必须发现错误假设的确切位置。
这里没有工具或分步指导。修正逻辑错误通常包括实验和迭代测试,两者都能识别问题并找出解决问题的方法。然而,有一些建议可能会有所帮助:
* 查看现有约束。 确保您没有错过任何约束或意外添加不必要的约束。 确保所有约束都附加到正确的项目和属性。
* 仔细检查视图框架。 确保没有任何东西意外地伸展或缩小。
这对于具有不可见背景的视图(如标签或按钮)尤为重要。 这些项目意外调整大小时可能并不明显。
调整大小的一个症状是基线对齐的视图不再正确排列。 这是因为仅当视图以其内在内容高度显示时,基线对齐才起作用。 如果垂直拉伸或缩小视图,文本会错误地显示在错误的位置。
* 如果控件应始终与其内在内容大小匹配,请为其提供非常高的内容拥抱和压缩阻力优先级(例如,999)。
* 查看您对布局所做的任何假设,并添加显式约束以确保这些假设为真。
请记住,不可满足的布局通常是最容易找到和修复的问题。 在发生冲突之前添加其他约束,然后检查并修复冲突。
* 尝试理解为什么给定的约束产生您看到的结果。 如果你理解它,你就可以很好地修复它了。
* 尝试替代约束。 自动布局通常为您提供针对同一问题的多种不同解决方案。 尝试不同的方法可以解决问题,或者至少可以更容易发现错误。
>原文地址
>[Logical Errors](https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/AutolayoutPG/LogicalErrors.html#//apple_ref/doc/uid/TP40010853-CH20-SW1)