有時我們經(jīng)常在xcode控制臺上看到這樣的信息

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. 是給我們的提示信息,告訴我們?nèi)绾蝸聿蹲竭@個問題。
1.首先我們創(chuàng)建一個symbolic斷點。斷點名就是UIViewAlertForUnsatisfiableConstraints 觸發(fā)斷點的操作就寫 po [[UIWindow keyWindow] _autolayoutTrace]

這個設(shè)置就是發(fā)現(xiàn)約束錯誤的時候自動打印相關(guān)的信息。
但是一般我們可能創(chuàng)建視圖時約束就發(fā)生錯誤了,這時候打印不出錯誤信息,我們可以跳過斷點,等視圖出現(xiàn)了,手動停止,然后控制臺 po [[UIWindow keyWindow] _autolayoutTrace] 來打印如圖

打印信息大致如下:

這個時候我們再結(jié)合之前的提示,也就是橙色字里面的這一句,很重要。

表明系統(tǒng)幫你把這個多余的約束移除了。約束的相關(guān)信息也在上面。你再結(jié)合剛才po出來的信息,就能很快找到這個view在哪一層。比如,提示中 0x7fc135408a30 這個內(nèi)存地址,在我們po出來的層級關(guān)系里面是最上面的一層,因為我們這個demo最上面的一層就是藍(lán)色的testview。。。所以我們可以快速判斷是這個view上面的某個約束出了問題。。如果同層級的view比較多,難以判斷,我們可以通過改變view的顏色,直觀地看出來是哪個view。

我們也可以打印一下約束的信息

再結(jié)合代碼,便可找到大致有問題的地方了。
2.如果你的視圖是使用masonry來約束的,你還可以使用下面??的方式來查找有問題的視圖。。。
首先要明確大致出問題的地方,然后給每個可能有問題的視圖設(shè)置mas_key,如下:

此時運行到有問題的地方后,則會打印如下信息。

此時再看到打印的信息,則能很快確定是reprintedLabel出了問題。此時能很清晰的看到問題出在哪里,此時修改代碼即可。