美文网首页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