zoukankan      html  css  js  c++  java
  • TableCell高度的控制

    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/

  • 相关阅读:
    AWK用法详解
    追加内容到指定的行
    自动scp(二)
    Spring 容器IOC解析及简单实现
    Spring 容器AOP的实现原理——动态代理
    Try语句中有return,那么finally中的code会执行吗?什么时候执行?
    Java中HashMap和TreeMap的区别
    HashTable和HashMap的区别详解
    ArrayList、LinkedList与Vector的对比
    事务是什么
  • 原文地址:https://www.cnblogs.com/wavky/p/5722796.html
Copyright © 2011-2022 走看看