TableCell高度的控制

计算并指定行高rowHeight

  • 强制指定:self.tableView.rowHeight = 88
  • 或实现UITableViewDelegate.tableView(..heightForRowAtIndexPath) -> CGFloat方法动态指定每行行高
    此时rowHeight的设置将视为无效

估算高度estimatedRowHeight(iOS7)

设置方式与一般cell高度设置类似。

提供高度估算值可延迟未显示cell的实际高度计算,不使用时在table加载时马上执行所有cell的高度计算,以提供进度条的长度依据。

但实际运行时会一边加载显示cell,一边运算当前准备显示的cell实际高度,从而导致界面卡顿以及进度条跳跃变化。

开启估算后有助于减少cell高度计算的总次数。

self-sizing cell(iOS8)

新特性:自计算高度cell。

使用步骤:

  1. 先指定估算高度 self.tableView.estimatedRowHeight = 80 (强制必须设置)
  2. 设置行高 self.tableView.rowHeight = UITableViewAutomaticDimension (实际上已经是默认值,可省略设置)

已知问题

不论使用UITableViewDelegate还是 self-sizing 方式指定行高:
iOS7 中cell高度具有缓存机制,实际高度计算次数与数据总量相关,满足要求后不再重新计算,不影响View回收。
iOS8 中则每次显示cell都将执行一次新的高度计算,以支持cell的动态高度变化需求,但会导致明显的滑动卡顿。

第三方 UITableView + FDTemplateLayoutCell

第三方组件方案,既有iOS8 self-sizing功能简单的API,又可以达到iOS7流畅的滑动效果,还保持了最低支持iOS6。

类似iOS7中提供cell高度缓存,并且在数据更新后对失效部分的缓存进行标记重计算。

cell的高度缓存会在UITableView没有滑动的空闲时刻执行计算,保证滑动流畅性。

参考:http://blog.sunnyxx.com/2015/05/17/cell-height-calculation/

TableCell高度的控制的更多相关文章

  1. Js控制Div在浏览器中的高度

    //需求是,我需要通过浏览器内容可视化的高度来控制div的高度boxheight(); //执行函数function boxheight(){ //函数:获取尺寸 //获取浏览器窗口高度 var wi ...

  2. 解决angular-deckgrid高度不均衡和重加载的问题

    在项目中使用angular-deckgrid+ng-infinite-scroll实现瀑布流的无限加载.但是实际测试中发现deckgrid有2个比较严重影响体验的BUG: 每次添加新的card,整个d ...

  3. 四轴飞行器飞行原理与双闭环PID控制

    四轴轴飞行器是微型飞行器的其中一种,相对于固定翼飞行器,它的方向控制灵活.抗干扰能力强.飞行稳定,能够携带一定的负载和有悬停功能,因此能够很好地进行空中拍摄.监视.侦查等功能,在军事和民用上具备广泛的 ...

  4. 基于CkEditor实现.net在线开发之路(3)常用From表单控件介绍与说明

    上一章已经简单介绍了CKEditor控件可以编写C#代码,然后可以通过ajax去调用,但是要在网页上面编写所有C#后台逻辑,肯定痛苦死了,不说实现复杂的逻辑,就算实现一个简单增删改查,都会让人头痛欲裂 ...

  5. DEDE建站之图片标签技巧指南

    做dede站的时候,曾经遇到很苦恼的事情,就是给图片集添加了一个网上下载下来的特效,需要给图片的链接上添加一个rel属性,供JS调用以达到那种特效.但是当时只知道dede的图片链接标签是[field: ...

  6. AutoCAD .NET API 之——DimStyleTableRecord 的属性列表

    DimStyleTableRecord Properties: Properties Description(描述) Dimadec 角度标注保留的有效位数 Dimalt 控制是否显示换算单位标注值中 ...

  7. 【PCB】电子元件封装大全及封装常识

    电子元件封装大全及封装常识 电子元件封装大全及封装常识 一.什么叫封装封装,就是指把硅片上的电路管脚,用导线接引到外部接头处,以便与其它器件连接.封装形式是指安装半导体集成电路芯片用的外壳.它不仅起着 ...

  8. 边界网关协议BGP

    Border Gateway Protocol (BGP) is a standardized exterior gateway protocol designed to exchange routi ...

  9. JS学习之DOM节点的关系属性封装、克隆节点、Dom中Style常用的一些属性等小结

    JS DOM节点: 在JS DOM中节点的关系被定义为节点的属性: 通常有以下几种节点之间的关系: (这里的关系是所有浏览器都支持的) parentNode    父节点 childNodes     ...

随机推荐

  1. [QualityCenter]设置工作流脚本-缺陷字段值发生变化时的处理

    需求:缺陷状态发生不同变化时,系统会的自动处理一些字段值的变化 在脚本编辑器找到Defects_Bug_FieldChange函数,然后填写以下代码: Sub Defects_Bug_FieldCha ...

  2. 存储过程之七—java代码调用

    一.简介 jdbc调用存储过程与调用一般的sql语句有些差别.jdbc调用一般的sql语句的时候,返回的是结果集,或是sql语句后是否执行成功的标记量.而存储过程返回的可以是结果集,输出参数.返回状态 ...

  3. jQuery Form 表单提交插件-----formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的 应用

    一.jQuery Form的其他api  1.  formSerialize 将表单序列化成查询串.这个方法将返回一个形如: name1=value1&name2=value2的字符串.是否可 ...

  4. Hibernate基于注解方式配置来实现实体和数据库之间存在某种映射关系

    实体和数据库之间存在某种映射关系,hibernate根据这种映射关系完成数据的存取.在程序中这种映射关系由映射文件(*.hbm.xml)或者java注解(@)定义. 本文以java注解的形式总结映射关 ...

  5. ASP.NET5 MVC6入门教学之一(自己动手)

    等待微软开源大动作已经好几年了,终于ASP.NET 5发布了.今天给新手们写一个简单地教程,教你认识一下ASP.NET5 MVC6 1.安装kvm 首先,你需要以管理员权限打开cmd,执行如下的脚本: ...

  6. sphinx增量索引

    首先建立一个计数表,保存数据表的最新记录ID CREATE TABLE `sph_counter` (  `id` int(11) unsigned NOT NULL,  `max_id` int(1 ...

  7. java 使用POI批量导入excel数据

    一.定义 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. 二.所需jar包: 三.简单的一个读取e ...

  8. Microsoft Community

    一.简介 Microsoft Community 是一个免费社区和讨论论坛,项目开发遇到的问题可以在这里进行提出和解答. 二.地址 http://answers.microsoft.com/zh-ha ...

  9. Beeline known issues

    If you use nohup myscript.sh , You beeline scripts may not work, Pay attention to this in your job.

  10. HDU 4990 Ordered Subsequence --数据结构优化DP

    题意:给一串数字,问长度为m的严格上升子序列有多少个 解法:首先可以离散化为10000以内,再进行dp,令dp[i][j]为以第i个元素结尾的长度为j的上升子序列的个数, 则有dp[i][j] = S ...