美文网首页
关于iOS12下CollectionView瀑布流重用后约束错乱

关于iOS12下CollectionView瀑布流重用后约束错乱

作者: Bestmer | 来源:发表于2019-02-14 10:35 被阅读23次

    前言

    接手的新项目,有一处自定义了UICollectionViewLayout,实现瀑布流的效果。在iOS12以下的系统运行,一切正常。在真机iOS12的系统运行,进入重用池后出现了显示错乱的问题。


    Bug重现

    image
    • 重用后,图片显示错乱,其实不止是图片,而是整个约束都乱了,用户图片都跑到最上面去了。

    初步排查

    • 第一眼看过去,以为是图片的contentMode在某些情况被更改拉伸,试了一圈发现不对,走不通;
    • 换了一个思路,会不会是自定义UICollectionViewLayout的问题,于是替换成了系统的UICollectionViewLayout,发现重用或者下拉刷新后约束正常了,但工作量太大,需要进一步排查瀑布流内部的代码逻辑;
    • 最后想了下,或许是contentView的原因,查看cell的xib文件,发现所有UI控件都是直接加到self上的,将所有控件嵌入到一个空白的UIView下,问题解决。


      image
      image
    • 在网上调研了一圈相关问题,怀疑是translatesAutoresizingMaskIntoConstraints,这个属性的原因,iOS12里面,在cell进入重用池的时候,translatesAutoresizingMaskIntoConstraints被置为了YES,导致直接加到self身上的控件重用后约束出现冲突。

    解决后

    image

    最后

    虽然最后解决问题只花了几分钟,但是排查问题的过程很需要耐心,这种只在某一系统下才能复现的问题,往往很令人头疼,记录下来希望别人少走弯路吧。

    相关文章

      网友评论

          本文标题:关于iOS12下CollectionView瀑布流重用后约束错乱

          本文链接:https://www.haomeiwen.com/subject/yabseqtx.html