1. 程式人生 > >快速找到約束有問題的控制元件

快速找到約束有問題的控制元件

以前自動佈局的時候,控制元件多了,就容易出錯,但是控制元件太多了,實在看不出哪裡出了問題,

看到很多大牛也講解過,但是不是排版有問題,就是不夠詳細(原諒我是新手,喜歡直觀一點的排版),今天在做第三方分享的時候正好排版又出了問題,就特此做個記錄。

例子很簡單,只有一個分享按鈕(主要介紹斷點的用法)

1.png

圖上我做了標註,相信用過約束的人都能看明白,問題來了,怎麼找出這個問題控制元件呢?(懶得寫程式碼,借用他人的簡書片段) 1.開啟斷點導航(cmd+7) 2.點選左下角的+按鈕 3.選擇Add Symbolic Breakpoint 4.在Symbol新增UIViewAlertForUnsatisfiableConstraints

再次除錯的時候就可以通過LLDB來除錯了,然並卵,如果你不知道LLDB的話。 所以交給你一個小技巧,新增

po [[UIWindow keyWindow] _autolayoutTrace](OC專案)
//或
expr -l objc++ -O -- [[UIWindow keyWindow] _autolayoutTrace](Swift專案)。

我這裡是OC程式碼,通過以上步驟,在我這個例子中點選執行,結果如下

2.png

其中AMBIGUOUS相關的檢視就是約束有問題的,0x7f9dc1e39440就是有問題的控制元件的首地址。

接著我們 在lldb中這麼除錯

 expr ((UIView*) 0x7f9dc1e39440).backgroundColor=[UIColor redColor]
//這句話就是讓有問題的控制元件變色,本來我的分享按鈕是綠色的,既然它約束有問題,我們就強制
//讓它變為紅色(只要顏色不和原來一樣,你能記住就行)

3.png

這樣,就會列印如下結果

4.png

這時候你可以把斷點取消,然後執行,你會發現 有問題的控制元件變成紅色了

5.png

既然我們找到了有問題的控制元件,我們直接修改該控制元件的約束就好了,比如我現在把兩邊距離都改成55

6.png

然後把UIViewAlertForUnsatisfiableConstraints斷點取消掉,command + shift + k ,clean一下(如果不這樣,Xcode可能還會執行上次殘留的結果,還會列印約束錯誤),然後執行,你會發現,沒有約束報錯了。。。

7.png

好了,就到這裡了,相信和我有同樣困擾的朋友看到後就能知道到底是哪裡的控制元件出了問題,找出來改改約束,再也不用為約束髮愁了。

作者:xcbxcb596479547 連結:https://www.jianshu.com/p/77d4ae315ac6 來源:簡書 簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。