0%

Autolayout指南·调试 AutoLayout·逻辑错误

010-Autolayout指南·调试 AutoLayout

逻辑错误

逻辑错误都是一些简单的 bug。有时候你会有一些错误的假设,可能是一个有关 Autolayout 如何计算 view 的 frame 的假设,可能是一个有关你创建的一系列约束,或者设置的一些视图属性的假设,也可能是一个有关约束如何互动从而创造出复杂布局表现的假设,总之都是一些并不符合你所预想的模型的地方。

逻辑错误也是最难被发现的,当你已经排除了其他所有可能性,那么无论多么不可置信,剩下的问题就只能是逻辑错误的问题了。然而即使你已经确信你的布局有 bug,你也仍然必须找到错误假设到底存在于何处。

没有工具或是说明步骤能够帮助你,修复逻辑错误通常需要实验和迭代测试,既要识别出问题,又要确定解决如何解决它。不过这里仍然有一些建议也许能够帮助到你:

  • 检查当前约束,确保没有遗漏约束或者突然添加了不想要的约束,确保所有的约束都被绑定在正确的 view 和正确的属性上
  • 检查 view 的 frame,确保未发生意料之外的压缩或延展,这一步对于有不可见背景的 view 尤为重要,比如 label 或者 button。但是当这些元素被意外重设尺寸时可能并没有那样明显。被意外调整大小的一个症状是所有的基线对齐视图都不再正确地排列了,因为只有当 view 按照其 intrinsic content 高度来设置时基线才能正常对齐。如果你在竖直方向上压缩或者延展视图,文案就会神秘地出现在错误的位置
  • 如果一个控制器需要始终保持它的 intrinsic content size,那么就给它的 content-hugging 和 compression-resistance 一个很高的优先级
  • 寻找所有你用来创建当前布局的假设,并用显式的约束确保所有假设都成立。记住,无法满足的约束导致的问题一般都容易找到和修复,所以可以一直添加额外的约束,一直到你遇到了冲突,然后去检查和修复冲突
  • 尝试理解为什么给定的约束会产生你看到的结果,如果你理解了它,那么你就很容易找到方法修复它
  • 测试一些替代约束,Autolayout 一般会为一个相同的问题提供给你一些不同的解决方案,尝试一个不同的方案有可能会解决问题,或者至少能使定位错误变得容易一些