調(diào)試autolayout:_autolayoutTrace(20160323補充)

鎮(zhèn)樓圖

前言

autolayout玩的不溜老客?autolayout不熟悉缀磕?

不用擔心本篇文章就是介紹一下筆者在工作中調(diào)試autolayout的一個小技巧而已逢享,于autolayout本身技術(shù)并無太大關(guān)聯(lián)鞠值。廢話不多說贪薪,讓我們一起來探險吧叠赐。

來認識一下

UIWindow里有一個名為_autolayoutTrace的私有方法慧妄,該方法返回值是一個字符串对妄,而這個字符串則是包含了UIWindow中整個視圖的層次結(jié)構(gòu)河绽。而在約束這一塊有問題的視圖己单,_autolayoutTrace會使用AMBIGUOUS layout標記出視圖并告知你缺少或者某些約束。所以一般情況下用_autolayoutTrace來調(diào)試約束耙饰,筆者建議直接在控制臺搜索是否存在AMBIGUOUS字符來判斷約束是否有問題纹笼。

動手練一練

使用該方法最好的方式就是在控制器完全加載完了,并在模擬器或者iPhone上能看到視圖了苟跪,然后讓程序暫停(pause program execution)并在控制臺輸入po [[UIWindow keyWindow] _autolayoutTrace]在按下回車鍵廷痘,你就能看見神奇的一刻了。

暫停app的效果圖(pause program execution)

.lldbinit

到目前為止雖然我們想要的效果實現(xiàn)了件已。但是笋额,po [[UIWindow keyWindow] _autolayoutTrace]在控制臺輸入的時候并未有單詞提示,不過好在這條命令很好記篷扩。當然也還有一個更高級的玩法兄猩,就是在.lldbinit里為這個命令設置一個別名。之前我寫的文章里也三番五次的介紹過.lldbinit了,所以在此不再過多贅述枢冤,簡單描述就是Xcode啟動的時候會去找這個文件鸠姨,而我們可以在這個文件里進行一些LLDB命令的初始化,比如設置別名等淹真。

在此讶迁,我們創(chuàng)建一個.lldbinit文件,打開你的終端(terminal)輸入touch ~/.lldbinit命令核蘸,然后在open ~/.lldbinit巍糯,不出意外的話文本編輯器打開,然后在此設置別名客扎,在文本編輯里輸入command alias zxp_autolayout_trace po (id)[[UIWindow keyWindow] _autolayoutTrace]即可

1.如果你之前存在.lldbinit這個文件鳞贷,當你輸入touch ~/.lldbinit并不會造成任何影響,所以在此放心使用這條命令虐唠。

2.而以上在文本編輯器里的字符串zxp_autolayout_trace 這是我設置的別名,你們也可以把這個改成你們自己想要的名字惰聂。

3.或許你們發(fā)現(xiàn)了po (id)[[UIWindow keyWindow] _autolayoutTrace]這里顯示的指定了返回值疆偿,因為之前就有說過此方法返回值是一個字符串,如果不顯示指定返回值則在這兒是不生效的搓幌。所以就返回了一個id類型杆故。

到目前為止別名就設置完了,在控制臺里就不需要在輸入po [[UIWindow keyWindow] _autolayoutTrace]這條難看又長的命令了溉愁。而是直接輸入你設置的別名即可处铛,并且還有單詞提示哦。

PS:如上步驟我設置的別名是zxp_autolayout_trace所以在控制臺里輸入zxp_autolayout_trace即可拐揭。

結(jié)語

如果你覺得布局和預期的有點不一樣撤蟆,或者無法確定自己寫的約束布局是否正確,那或許你可以試試這個好玩的小技巧堂污。

20160323補充

老是有人問為何不用Xcode自帶的view調(diào)試功能尼家肯。其實這里想補充的是,那個Xcode的Debug View Hierarchy是審查UI的盟猖,而非是檢查autolayout是否有歧義的讨衣。本篇所介紹的重點內(nèi)容是如何揪出autolayout里的坑。而對于有歧義的約束會有AMBIGUOUS字符標識式镐,假設你缺少一個height的約束反镇,AMBIGUOUS就會標注出缺少height。所以本篇內(nèi)容與UI審查無關(guān)更與Debug View Hierarchy無關(guān)娘汞,如果想要審查UI歹茶,在這里筆者推薦reveal

本文歡迎轉(zhuǎn)載,但不要忘了標注原文出處哦辆亏!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末风秤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子扮叨,更是在濱河造成了極大的恐慌缤弦,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件彻磁,死亡現(xiàn)場離奇詭異碍沐,居然都是意外死亡,警方通過查閱死者的電腦和手機衷蜓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門累提,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人磁浇,你說我怎么就攤上這事斋陪。” “怎么了置吓?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵无虚,是天一觀的道長。 經(jīng)常有香客問我衍锚,道長友题,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任戴质,我火速辦了婚禮度宦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘告匠。我一直安慰自己戈抄,他們只是感情好,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布后专。 她就那樣靜靜地躺著呛凶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪行贪。 梳的紋絲不亂的頭發(fā)上漾稀,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機與錄音建瘫,去河邊找鬼崭捍。 笑死,一個胖子當著我的面吹牛啰脚,可吹牛的內(nèi)容都是我干的殷蛇。 我是一名探鬼主播实夹,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼粒梦!你這毒婦竟也來了亮航?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤匀们,失蹤者是張志新(化名)和其女友劉穎缴淋,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泄朴,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡重抖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了祖灰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钟沛。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖局扶,靈堂內(nèi)的尸體忽然破棺而出恨统,到底是詐尸還是另有隱情,我是刑警寧澤三妈,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布延欠,位于F島的核電站,受9級特大地震影響沈跨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜兔综,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一饿凛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧软驰,春花似錦涧窒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至慧瘤,卻和暖如春戴已,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锅减。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工糖儡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人怔匣。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓握联,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子金闽,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容