CollectionView和TableView自身高度的隐式递归计算

1、前沿:我们一般会碰到这样的需求,一个tableview或者一个colletionview放在一个scrollview上边,而tableview和collectionview的cell是不可控的,更具请求内容变化而变化。如图:(标签的多少和标签的长度不一样,然而下边又有一个可以跟着滑动的view)

思路一:根据请求的内容一个一个计算宽度,然后计算行数,根据:表头+线宽(为了准确)+行间距*行间距个数+行高度*行数+区头+区尾;

我也这样考虑过,但是这样计算量不言而喻。

思路二:考虑最后一个cell的右下定点坐标加上一定的高度转化为tableview的高度,然后走了一点弯路:

cellForItemAtIndexPath//方法

使用隐式递归:(为什么叫隐式递归说明:因为不是写的递归算法,而是使用cell的重用算法)

- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
XYimprovenCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
CGPoint point = [cell convertPoint:CGPointMake(cell.width, cell.height) toView:self];
self.height = fabs(point.y) + ;
return cell;
}

让每一次cell的右边定点定于collection的高度;

问题:重用的时候是先加载cell然后赋值高度,不出现的时候将不加载。

然后使用:

- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath{
CGPoint point = [cell convertPoint:CGPointMake(cell.width, cell.height) toView:self];
self.height = fabs(point.y) + ;
if (indexPath.row == _titleArry.count - ) {//限制在最后一个cell加载时候才返回高度
if (self.allHeight) {
self.allHeight(self.height);
}
} }

因为是cell的reload方法加载cell,在外边使用这个高度更新别的frame:

_improvenCollectionView.allHeight = ^(CGFloat height) {
STRONGSELF
//更新高度
strongSelf.bgScrollView.contentSize = CGSizeMake(SCREEN_WIDTH, strongSelf.improvenCollectionView.maxY + );
strongSelf.buttonSure.frame = CGRectMake(, + strongSelf.improvenCollectionView.maxY,SCREEN_WIDTH - *,);
};

是不是有种多么痛的领悟,转载请标明出处!

最新文章

  1. 【Linux】重定向与管道
  2. MySQL Create Table创建表
  3. JavaScript 、jQuery动态创建元素的关键字~
  4. HDU-4035 Maze (概率DP求期望)
  5. Codeforces 600 E. Lomsat gelral (dfs启发式合并map)
  6. BestCoder Round #76 解题报告
  7. Cocos2d-x第一个坑,NDK 编译环境
  8. bzoj1293: [SCOI2009]生日礼物
  9. ip_conntrack 实现
  10. 百度编辑器umeditor使用总结
  11. select/**/*/**/from/**/RegSite
  12. iPad学做菜
  13. Knockout应用开发指南 第五章:创建自定义绑定
  14. MVC 怎么把string字符串转译成html格式
  15. JDFS:一款分布式文件管理系统,第三篇(流式云存储)
  16. JMeter 监听器之保存响应到文件
  17. leetcode33
  18. JavaScript -基础- 函数与对象(三)数组对象
  19. HTML之DocType的几种类型
  20. redis在windows上安装+RedisDesktopManager

热门文章

  1. [AC自己主动机+可能性dp] hdu 3689 Infinite monkey theorem
  2. windows添加本地文件托管到新增github库
  3. Angular使用echarts
  4. XF 开关控件
  5. 漫谈 JVM —— 内存模型、线程、锁
  6. WPF 数据模板的使用
  7. Delphi 10.2可以开发Linux桌面应用了
  8. layui 或者layer 父页面获取子页面数据 或者子页面获取父页面操作方法
  9. xadmin 无法创建xadmin_log 或者是xadmin源代码使用,没有引用xadmin包报错或 1146, "Table 'mxonline.xadmin_log' doesn't exist"
  10. erp的核心代码,替代orm