背景:从iOS11开始,突然发现项目里面进入tableView相关页面都开始报约束异常的问题,异常内容提示约束高度和Cell的contentView高度不一致。然后通过UI调试发现确实不一致了,但是很奇怪的问题是在iOS10以前的系统上就没有问题。问题的具体症状是Cell使用了自适应高度,在xib中因为Cell有下滑线的原因ContentView比Cell高度小0.5,所以约束高度加起来比Cell小0.5,但是当程序运行起来,一看异常提示,ContentView的高度变了,比Cell高度小0.3333333,大概情况就是ContentView高度变成了xx.66666667,比原来正常的xx.5多了一些高度,这个十分奇怪,这也是约束异常的原因。
思考:当时遇到这个问题考虑了很久,第一感觉是iOS11出了名的Bug多,多半是个系统Bug。然后想办法处理这个问题的思路就是改变ContentView的高度就好了,想了很多办法尝试有些有效有些无效,但是基本上都不是很好的处理方式,也一直拖着没有去解决。最后发现最好的办法就是让tableView的分割线隐藏,然后手动绘制Cell分割线,然而依然不够优雅,但是有效简单。后来在整理项目代码的时候,发现了当时写的这个绘制Cell分割线的方法,看了下自己的代码很简单就是绘制一个0.5高度的线,然后突然想到了很久以前的一篇文章,关于如何绘制1像素的线条,原理很简单就是按屏幕实际分辨率进行绘制,为了保障清晰可见,应该计算好位置,防止位置在两个像素中间的地方这样会造成线条虚化。这时候脑洞一开,cell的分割线如果也是1像素的线,那么0.3333就是在3x屏幕下的高度,正好平时用的是plus的机型,而xib中选择的是4.7寸的屏幕ÿ