iOS開發(fā)中办陷,在界面布局時候會遇到一些莫名其妙的bug析孽,各個地方都沒有違反正常規(guī)則,不管斷點跟蹤還是打印踊挠,還是通過debug view hierarchy乍桂,跟蹤下來,并沒有發(fā)現(xiàn)異常效床,但最終輸出結(jié)果就是出現(xiàn)問題睹酌。這個時候,除了其他調(diào)試方法之后剩檀,最好還是需要考慮2個方面的因素憋沿。
1.布局約束沖突 (主要講 Masonry)
Masonry約束,如果同樣的約束寫了2次沪猴,比如說寬度設(shè)置了2次辐啄,每次設(shè)置的值不同,這時候就沖突了运嗜。而不是像設(shè)置frame那樣壶辜,最后設(shè)置的值是有效值。這種約束沖突担租,xcode是不會給你報錯的砸民。小編曾經(jīng)在這個地方掉過坑,整了半天才搞明白奋救。(主要是小編道行實在太淺岭参,沒有仔細(xì)研究并看debug view hierarchy里面的提示,實在活該卡了很久尝艘。)
2.命名不規(guī)范
frame方式進(jìn)行布局的時候演侯,有時候會保存frame的值,進(jìn)行一些界面調(diào)整利耍。假如成員變量命名為frame蚌本,這個時候項目中使用self.frame時候,UI界面混亂隘梨,不是你想要的程癌。你檢查他的布局的時候,不管斷點跟蹤還是打印還是debug view hierarchy里面看值轴猎,都正常嵌莉,但是現(xiàn)實中他顯示的位置就是不對。這個時候捻脖,你會懷疑是不是大蘋果自己的bug锐峭?但是這個不可能吧中鼠。如果你能懷疑到是不是蘋果的bug的時候,就該想到自己是不是違規(guī)操作了沿癞,比如命名問題援雇。不管是其他變量還是一些方法名命名等等,最好不要與C椎扬,OC 這些系統(tǒng)關(guān)鍵字以及方法同名惫搏,這樣,你會遇到預(yù)想不到的bug蚕涤。
具體舉幾個例子筐赔,變量開頭不要已關(guān)鍵字開頭,比如new ?id frame 等等揖铜。
@property (nonatomic, assign) CGRect frame; ? 這樣寫茴丰,你就掉坑了,(這個坑天吓,實在太傷我了 ~~~~(>_<)~~~~ ? 贿肩,走過的路過的,千萬躲過呀失仁。尸曼。。)
@property (nonatomic, assign) CGRect tempFrame;? 這樣寫萄焦,恭喜你控轿,躲過坑了。