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是动态高度的,并不适合用这种方案
网友评论