美文网首页iOS学习笔记
mylayout布局框架:UIScrollView+UITabl

mylayout布局框架:UIScrollView+UITabl

作者: DaZenD | 来源:发表于2020-07-02 11:39 被阅读0次

    ios mylayout布局库,小记一下开发中思考的方案

    功能需求

    • 页面基于scrollview,展示内容比较多
    • 部分内容是列表形式,cell高度不规范

    层级结构

    mylayout的多级嵌套,这都无所谓,组要的结构是:scrollview内嵌tableview

    开发构想

    • scrollview内嵌mylayout作为根内容视图,用于滚动。根视图依赖于子视图内容。
    • mylayout视图基于frame,约束设置好,布局不会有啥问题
    • tableview禁止滚动,cell全展示。android中有该自定义组件,ios没有。通过计算高度tableview内容的高度实现
    • cell高度不规范,无法通过cellnumber*高度计算。考虑通过willDisplayCell,加载最后一个cell的时候,根据tableview的contentsize确定tableview的高度

    问题

    ios 11 以下,cell不加载问题

    TableView.myHeight = MAXFLOAT;

    tableview初始化时候,给个高度。这样才能触发cell加载,由于cell条数又不确定,只能给最大。需要注意初始的时候把tableview隐藏,不然加载个这个大的tableview,app会卡死掉,内存暴增,ANR

    tableview 高度跟内容实际高度不一样

    TableView.estimatedRowHeight = 非0数;

    TableView.myHeight = tableView.contentSize.height

    就会导致tableview高度跟内容高度不一样。给了预估高度,tableView.contentSize的高通过cellnumber*estimatedRowHeight得到

    解决:只要触发全部的cell加载,tableview的高度根据CGRectGetMaxY(cell.frame)得到即可

    总结

    tableview本身是wrapcontent的,没有高度,不会触发cell的加载。两种解决方案:

    tv初始高度

    1:初始化时候
    TableView.myHeight = MAXFLOAT;
    
    2:加载时候
    willDisplayCell 加载最后一个cell。tableview的高度根据CGRectGetMaxY(cell.frame)计算
    
    

    我也不知道这个方案的原理

    1:初始化时候
    TableView.estimatedRowHeight = 非0数;
    
    2:加载时候
    [strongSelf.freshUnitTableView reloadData];
            strongSelf.freshUnitTableView.myHeight = strongSelf.freshUnitTableView.contentSize.height;
    

    这个方案要注意。tableView.contentSize的高通过cellnumber*estimatedRowHeight得到。。所以,cell是动态高度的,并不适合用这种方案

    相关文章

      网友评论

        本文标题:mylayout布局框架:UIScrollView+UITabl

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