iOS Masonry布局UI之约束冲突解决

想必Masonry是什么?就不用解释了。公司项目采用纯代码布局,使用的就是Masonry,当然使用Masonry布局,时长会出现约束冲突的问题,这也就开始了我的再次优化之路->消除约束冲突。
当然控制台打印的约束冲突,一般显示不会有问题,个别除外,约束本来就是错误的那就另当别论了!虽然不影响功能实现,此类警告信息看着很不爽。


解决此类问题时,顺便做下总结,产生约束冲突一般为以下几种情况:
1.约束冗余
2.更新约束
3.约束优先级

一、约束冗余

设置约束冗余,顾名思义就是对于同一约束项,添加了过多的约束限制,从而产生冲突。例如:
image.png

图中设置的冗余约束为,视图的高度约束,因为已经添加了top、height,此时约束已经设置好了,bottom是已经知晓的,但是又设置了一次bottom,所以造成了约束冗余,删除bottom约束即可。其他冗余约束类似。

二、更新约束

一般设置约束之后,在某些特定的场景下,需要更新约束设置,此时比较容易造成约束冲突。翻阅Masonry GitHub Readme可知,其设置约束常用的方法:
1、mas_makeConstraints
正常设置约束方法。
2、mas_updateConstraints
更新约束方法。(注意:更新常量值)
3、mas_remakeConstraints
重新设置约束方法。(删除之前的约束,再添加新的约束)
暴力解决冲突,使用mas_remakeConstraints更新约束,但效率不高。官方推荐还是使用mas_updateConstraints更新约束。更新约束冲突与否的情况对比如下:
场景1:父子视图

image.png

一、约束x、y:
image.png
更新约束:
image.png
结论:x、y不冲突(上述x、y值是随便写的)
二、约束centerX、centerY,分为2种情况:
1.
image.png
更新约束:
image.png
结论:上述设置不冲突(CenterX值是随便写的),CenterY同上。
2.
image.png
更新约束:
image.png
结论:上述设置冲突(CenterX值是随便写的),CenterY同上。

三、Center分为2种情况:

1.
image.png
上述红框内的两种设置都可以

更新约束:
image.png
结论:上述设置不冲突(更新以及设置的约束数值均为随便填写)。
2.
image.png
更新约束:
image.png
结论:上述设置冲突(更新以及设置的约束数值均为随便填写)。

四、width、height分为2种情况:

1.
image.png
更新约束:
image.png
结论:上述设置不冲突(更新以及设置的约束数值均为随便填写)。
2.
image.png

上述设置的两种方法均可
更新约束:
image.png
结论:上述设置冲突(更新以及设置的约束数值均为随便填写)。height同上。

综上所述,更新约束时需要查看是否为依赖父视图的约束,是则需要更新之前将原有的约束卸载uninstall,然后再次添加约束。
1、x、y不受影响
2、width、height受影响最大。

场景2:兄弟视图
image.png

一、设置约束x、y 2种情况:
1.
image.png

更新约束:
image.png

结论:上述设置会冲突。
2.
image.png

更新约束:
image.png
结论:上述设置不会冲突。上述约束数值均随便填写。
综上所述:
是否存在依赖关系,是否改变了依赖关系。
第一种情况,更新约束后,更新的left、top的约束是相对于父视图的约束,而在更新之前是相对于brother视图设置的约束。从而会产生约束冲突,需要卸载之前的约束再更新。

第二种情况,更新的约束依然是相对于brother视图的约束,只是改变了约束的常量值,从而并不会产生约束冲突。
二、设置width、height约束分为两种情况:

1.
image.png

更新约束:
image.png

结论:上述设置不会冲突。
2.
image.png

更新约束:
image.png
结论:上述设置会冲突。上述约束数值均随便填写。
综上所述,情况与x、y约束情况一致,其他情况以此类推!

三、约束优先级

在Masonry中优先级:低优先级(priorityLow)、中优先级(priorityMedium)、高优先级(priorityHigh)。
默认情况下,Masonry设置的约束为中级,当在某些特定场景下(很少,有可能父视图和其他视图的约束导致,此种情况后续会跟进。),正常设置约束的情况下,也会出现约束冲突警告,此时可以设置约束的优先级来避免约束冲突警告。例如:
视图的width必须为某个值,但此约束存在约束冲突,此时可以设置width约束优先级为高优先级。

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容