iOS Masonry布局UI之約束沖突解決

想必Masonry是什么?就不用解釋了。公司項目采用純代碼布局流部,使用的就是Masonry雕憔,當然使用Masonry布局,時長會出現(xiàn)約束沖突的問題,這也就開始了我的再次優(yōu)化之路->消除約束沖突瑞你。
當然控制臺打印的約束沖突镀赌,一般顯示不會有問題音念,個別除外沪饺,約束本來就是錯誤的那就另當別論了!雖然不影響功能實現(xiàn)闷愤,此類警告信息看著很不爽整葡。


解決此類問題時,順便做下總結(jié)讥脐,產(chǎn)生約束沖突一般為以下幾種情況:
1.約束冗余
2.更新約束
3.約束優(yōu)先級

一遭居、約束冗余

設(shè)置約束冗余,顧名思義就是對于同一約束項旬渠,添加了過多的約束限制俱萍,從而產(chǎn)生沖突。例如:
image.png

圖中設(shè)置的冗余約束為告丢,視圖的高度約束枪蘑,因為已經(jīng)添加了top、height岖免,此時約束已經(jīng)設(shè)置好了岳颇,bottom是已經(jīng)知曉的,但是又設(shè)置了一次bottom颅湘,所以造成了約束冗余话侧,刪除bottom約束即可。其他冗余約束類似栅炒。

二掂摔、更新約束

一般設(shè)置約束之后术羔,在某些特定的場景下赢赊,需要更新約束設(shè)置,此時比較容易造成約束沖突级历。翻閱Masonry GitHub Readme可知释移,其設(shè)置約束常用的方法:
1、mas_makeConstraints
正常設(shè)置約束方法寥殖。
2玩讳、mas_updateConstraints
更新約束方法。(注意:更新常量值)
3嚼贡、mas_remakeConstraints
重新設(shè)置約束方法熏纯。(刪除之前的約束,再添加新的約束)
暴力解決沖突粤策,使用mas_remakeConstraints更新約束樟澜,但效率不高。官方推薦還是使用mas_updateConstraints更新約束。更新約束沖突與否的情況對比如下:
場景1:父子視圖

image.png

一秩贰、約束x霹俺、y:
image.png
更新約束:
image.png
結(jié)論:x、y不沖突(上述x毒费、y值是隨便寫的)
二丙唧、約束centerX、centerY觅玻,分為2種情況:
1.
image.png
更新約束:
image.png
結(jié)論:上述設(shè)置不沖突(CenterX值是隨便寫的)想际,CenterY同上。
2.
image.png
更新約束:
image.png
結(jié)論:上述設(shè)置沖突(CenterX值是隨便寫的)串塑,CenterY同上沼琉。

三、Center分為2種情況:

1.
image.png
上述紅框內(nèi)的兩種設(shè)置都可以

更新約束:
image.png
結(jié)論:上述設(shè)置不沖突(更新以及設(shè)置的約束數(shù)值均為隨便填寫)桩匪。
2.
image.png
更新約束:
image.png
結(jié)論:上述設(shè)置沖突(更新以及設(shè)置的約束數(shù)值均為隨便填寫)打瘪。

四、width傻昙、height分為2種情況:

1.
image.png
更新約束:
image.png
結(jié)論:上述設(shè)置不沖突(更新以及設(shè)置的約束數(shù)值均為隨便填寫)闺骚。
2.
image.png

上述設(shè)置的兩種方法均可
更新約束:
image.png
結(jié)論:上述設(shè)置沖突(更新以及設(shè)置的約束數(shù)值均為隨便填寫)。height同上妆档。

綜上所述僻爽,更新約束時需要查看是否為依賴父視圖的約束,是則需要更新之前將原有的約束卸載uninstall贾惦,然后再次添加約束胸梆。
1、x须板、y不受影響
2碰镜、width、height受影響最大习瑰。

場景2:兄弟視圖
image.png

一绪颖、設(shè)置約束x、y 2種情況:
1.
image.png

更新約束:
image.png

結(jié)論:上述設(shè)置會沖突甜奄。
2.
image.png

更新約束:
image.png
結(jié)論:上述設(shè)置不會沖突柠横。上述約束數(shù)值均隨便填寫。
綜上所述:
是否存在依賴關(guān)系课兄,是否改變了依賴關(guān)系牍氛。
第一種情況,更新約束后烟阐,更新的left搬俊、top的約束是相對于父視圖的約束,而在更新之前是相對于brother視圖設(shè)置的約束。從而會產(chǎn)生約束沖突悠抹,需要卸載之前的約束再更新珠月。

第二種情況,更新的約束依然是相對于brother視圖的約束楔敌,只是改變了約束的常量值啤挎,從而并不會產(chǎn)生約束沖突。
二卵凑、設(shè)置width庆聘、height約束分為兩種情況:

1.
image.png

更新約束:
image.png

結(jié)論:上述設(shè)置不會沖突。
2.
image.png

更新約束:
image.png
結(jié)論:上述設(shè)置會沖突勺卢。上述約束數(shù)值均隨便填寫伙判。
綜上所述,情況與x黑忱、y約束情況一致宴抚,其他情況以此類推!

三甫煞、約束優(yōu)先級

在Masonry中優(yōu)先級:低優(yōu)先級(priorityLow)菇曲、中優(yōu)先級(priorityMedium)、高優(yōu)先級(priorityHigh)抚吠。
默認情況下常潮,Masonry設(shè)置的約束為中級,當在某些特定場景下(很少楷力,有可能父視圖和其他視圖的約束導(dǎo)致喊式,此種情況后續(xù)會跟進。)萧朝,正常設(shè)置約束的情況下岔留,也會出現(xiàn)約束沖突警告,此時可以設(shè)置約束的優(yōu)先級來避免約束沖突警告剪勿。例如:
視圖的width必須為某個值贸诚,但此約束存在約束沖突方庭,此時可以設(shè)置width約束優(yōu)先級為高優(yōu)先級厕吉。

GitHub:https://github.com/SnapKit/Masonry

?著作權(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)容