James Yu


写了那么多的if else 依然未能参透其精髓。。。


iOS7 autolayout xib-multiplier bug

最近在项目中遇到一个非常奇葩的bug,只要进入一个页面,然后返回,必挂。控制台打印出各种乱七八糟的一大堆约束,根本看不懂。这个问题非常隐蔽,排查时,出现几个可疑点,但是经过不断验证,发现不是引起的原因。很多以前项目中常用的方法,在这边也出了问题。有种iOS开发三观被毁的感觉。最后,只能确定一个问题就是这边约束出了问题,从xib到代码都查了一遍,无论怎么查,都发现没有错。最后,结合git,采取了非常暴力的调试方法,就是每次将xib中的布局,一个个的删除掉。看看到底是哪边出了问题。。

当发现删除某一个xib,发现不挂的时候。历史经验告诉我们,这很可能是xib的bug,所以果断的删除掉,然后重新布局下,重新关联下变量,这样一般都能解决所遇到的问题。但是,这次都失效了。先看下这个布局的要求:

需求很简单,就是两个view根据屏幕宽度进行一定比例进行设置宽度。相信大家这个都非常清楚。然后在这两个view中分别进行布局。

在左边的view中加一个label,距离父view进行布局。就这样一个布局,再普通不过,不过在iOS7中会有问题。 但是,如果我这样布局: 在运行的时候就不会挂了。不过,无意之中,看到比例系数这边这样写的:

这边1/0.6总感觉怪怪的。所以就直接给了结果1.67,结果一运行各种不挂。顿时,一种无力吐槽的感觉。在iOS8上都好好的,iOS6上也好好的,偏偏iOS7上就是不行。就这个比例表达式,竟然是引起问题的根源。这个问题出现的很诡异,只有子视图根据父视图进行宽高约束和用了比例系数时才会出现!

所以,在xib中设置比例时,最好写最后的结果,免得出现这蛋疼的问题。而且非常难查!

comments powered by Disqus