美文网首页iOS
yoga布局的坑: 布局scrollView在更新布局时崩溃

yoga布局的坑: 布局scrollView在更新布局时崩溃

作者: openUmbrella | 来源:发表于2020-03-02 18:10 被阅读0次

    问题

    在使用yoga来布局一个可滑动界面时, 会使用到scrollView. 按着正常的流程布局下来:
    1. 创建scrollview
    2. 往scrollview中添加contentView
    3. 在contentView中添加内容
    4. 根视图调用 applyLayoutPreservingOrigin: 方法
    5. 将contentView的frame值的size赋值给scrollview的contentSize

    scrollView.contentSize = contentView.frame.size
    
    6. 在控制器的 viewWillLayoutSubviews 方法中 再次书写yoga布局的根视图的布局, 再次调用 applyLayoutPreservingOrigin: 方法. 这样写的目地是当屏幕旋转时, 仍可以布局正确
    

    问题在于: 在第6步的时候 在调用 applyLayoutPreservingOrigin: 时, 会发生崩溃.

    问题根源

    框架的bug

    在做布局计算时, 没有正确的将不属于yoga布局的子控件排除在外. 导致设置frame时 frame值为{0, 0, NaN, NaN}.

    崩溃原因

    我们在 viewWillLayoutSubviews 方法中 再次计算布局时, 由于scrollView控件中隐藏有 水平/垂直 滑块控件 ScrollIndicator 而yoga在计算布局时, 没有将这两个控件排除在外, 导致设置他们的frame值时, 出错了. (为什么我们在viewDidLoad中布局的时候没有崩溃? 因为那时候, 滑块控件还没有创建出来. 懒加载)

    解决方法

    yoga仓库中, 已经有一个国内的哥们发现并解决了这个问题

    不过在这个bug还未及时在cocoaPod中更新(目前最新版本是1.18.1).
    因此只能在yoga仓库中下载最新的代码了

    相关文章

      网友评论

        本文标题:yoga布局的坑: 布局scrollView在更新布局时崩溃

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