邏輯錯誤只是bug。在某個地方,你有一個錯誤的假設。也許這是一個關于自動布局如何計算視圖的假設。也許它是關于你所創建的約束集的假設,或者是你所設置的視圖屬性,也許它是關于約束如何相互作用來創建復雜行為的假設。不管怎樣,某些地方的某些東西并不完全符合你的思維模式。
邏輯錯誤是最難發現的。在排除了所有其他可能性之后,無論剩下的是什么,無論多么不可思議,都必須是一個邏輯錯誤。然而,即使您已經確定您有一個錯誤,您仍然必須發現錯誤假設的確切位置。
這里沒有工具或分步指導。修正邏輯錯誤通常包括實驗和迭代測試,兩者都能識別問題并找出解決問題的方法。然而,有一些建議可能會有所幫助:
* 查看現有約束。 確保您沒有錯過任何約束或意外添加不必要的約束。 確保所有約束都附加到正確的項目和屬性。
* 仔細檢查視圖框架。 確保沒有任何東西意外地伸展或縮小。
這對于具有不可見背景的視圖(如標簽或按鈕)尤為重要。 這些項目意外調整大小時可能并不明顯。
調整大小的一個癥狀是基線對齊的視圖不再正確排列。 這是因為僅當視圖以其內在內容高度顯示時,基線對齊才起作用。 如果垂直拉伸或縮小視圖,文本會錯誤地顯示在錯誤的位置。
* 如果控件應始終與其內在內容大小匹配,請為其提供非常高的內容擁抱和壓縮阻力優先級(例如,999)。
* 查看您對布局所做的任何假設,并添加顯式約束以確保這些假設為真。
請記住,不可滿足的布局通常是最容易找到和修復的問題。 在發生沖突之前添加其他約束,然后檢查并修復沖突。
* 嘗試理解為什么給定的約束產生您看到的結果。 如果你理解它,你就可以很好地修復它了。
* 嘗試替代約束。 自動布局通常為您提供針對同一問題的多種不同解決方案。 嘗試不同的方法可以解決問題,或者至少可以更容易發現錯誤。
>原文地址
>[Logical Errors](https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/AutolayoutPG/LogicalErrors.html#//apple_ref/doc/uid/TP40010853-CH20-SW1)