目录

iPhone6 Plus上面神秘的缝隙

目录

前几天写了个小模块,测试测出来一个UI上面的 bug,只在6plus/6s plus上才出现的问题,如图:

https://anyanf-img-1256234566.cos.ap-beijing.myqcloud.com/2016/trap-for-6p-series-a-mystical-gap.png

上面的白色区域是一个view,中间白色重置和红色确定按钮是一个view,下面灰色区域是一个view,简单来说就是分上中下三个view,但是这三个view的衔接出现了问题,使得每个view之间重现了一道缝隙.

看到这个bug后我重新看了一下我当时写的那块代码,中间view和下面的view的Y值是通过CGRectGetMaxY(上个view.frame)来获得的,也就是拿到了上一个view的最大的Y值来当做当前view的Y值,按理说应该是无缝连接的,事实上也的确是无缝连接,只是在plus机型上出现了问题.

然后我把机器连在电脑上跑起来项目通过xcode的Debug View Hierarchy看了一下这块的UI,让人震惊的事情发生了,用xcode把这块UI放大很多倍后,看到这三个view之间严丝合缝,一点问题都没有!

那么这到底是怎么个情况呢?可以确定不是代码计算的问题了,那为什么会有缝隙呢?看来是手机硬件相关的问题了.虽然知道代码是没有问题的,但是我们可以通过代码来解决这个问题的,比如上移一个点.后来发现个更省事的方法,就是把中间和下面的view的Y值强转成整形,然后这两条神秘的缝隙就消失了,其实这也是用了上移像素的原理,也就是说我还是上移中间和下面view的Y值了.

进而发现原来出现缝隙是因为上个view的最大的Y值是xxx.5,然后经过不严谨的分析可能因为在plus机型上pt:px是3:1,而真实显示在手机上的时候像素又按1080 / 1242的比例压缩了一下,再加上苹果可能在plus机型上对于不够1像素的颜色处理出现了差异,导致不够1像素的位置(Y值)显示到屏幕上被强制加了1个像素(纯粹瞎想,如果有更懂的大神请告知真实原因),所以中间和下面的view都出现了缝隙.

总结:因为要考虑plus机型,所以view之间的衔接尽量不要出现浮点数,或者在两个view的衔接处重叠1pt,目前看来这样就不会出现空隙了.

前几天又发现了一个新的问题,用系统控件一般情况是不会出现frame除不尽出现白边的,看来是系统做过优化了,但是呢,如果view的clipstobounds属性是yes的话 就会出现 ..看来是clipstobounds把系统优化的跟剪切了,然后上面的说的三个View之间的缝隙问题,可能是UICollectionView本身的优化不到位吧..一切仅是猜测,如果到时候出现问题了可以从这两个方面入手.