iOS开发中,在界面布局时候会遇到一些莫名其妙的bug,各个地方都没有违反正常规则,不管断点跟踪还是打印,还是通过debug view hierarchy,跟踪下来,并没有发现异常,但最终输出结果就是出现问题。这个时候,除了其他调试方法之后,最好还是需要考虑2个方面的因素。
1.布局约束冲突 (主要讲 Masonry)
Masonry约束,如果同样的约束写了2次,比如说宽度设置了2次,每次设置的值不同,这时候就冲突了。而不是像设置frame那样,最后设置的值是有效值。这种约束冲突,xcode是不会给你报错的。小编曾经在这个地方掉过坑,整了半天才搞明白。(主要是小编道行实在太浅,没有仔细研究并看debug view hierarchy里面的提示,实在活该卡了很久。)
2.命名不规范
frame方式进行布局的时候,有时候会保存frame的值,进行一些界面调整。假如成员变量命名为frame,这个时候项目中使用self.frame时候,UI界面混乱,不是你想要的。你检查他的布局的时候,不管断点跟踪还是打印还是debug view hierarchy里面看值,都正常,但是现实中他显示的位置就是不对。这个时候,你会怀疑是不是大苹果自己的bug?但是这个不可能吧。如果你能怀疑到是不是苹果的bug的时候,就该想到自己是不是违规操作了,比如命名问题。不管是其他变量还是一些方法名命名等等,最好不要与C,OC 这些系统关键字以及方法同名,这样,你会遇到预想不到的bug。
具体举几个例子,变量开头不要已关键字开头,比如new id frame 等等。
@property (nonatomic, assign) CGRect frame; 这样写,你就掉坑了,(这个坑,实在太伤我了 ~~~~(>_<)~~~~ ,走过的路过的,千万躲过呀。。。)
@property (nonatomic, assign) CGRect tempFrame; 这样写,恭喜你,躲过坑了。