UIViewAlertForUnsatisfiableConstraints

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


控制臺.png

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. 是給我們的提示信息,告訴我們?nèi)绾蝸聿蹲竭@個問題。

1.首先我們創(chuàng)建一個symbolic斷點。斷點名就是UIViewAlertForUnsatisfiableConstraints 觸發(fā)斷點的操作就寫 po [[UIWindow keyWindow] _autolayoutTrace]

特征斷點.png

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


手動停止.png

打印信息大致如下:


打印信息.png

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

很重要的一個提示.png

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


改變顏色.png

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

打印約束信息.png

再結(jié)合代碼,便可找到大致有問題的地方了。

2.如果你的視圖是使用masonry來約束的,你還可以使用下面??的方式來查找有問題的視圖。。。

首先要明確大致出問題的地方,然后給每個可能有問題的視圖設(shè)置mas_key,如下:


設(shè)置mas_key.png

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


設(shè)置mas_key后打印的信息.png

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

參考鏈接:http://www.itdecent.cn/p/a668e6402b59

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容