UITableView相关

group and plain style

iOS的tableView有两种样式:一种是plain(默认);一种是grouped。iOS系统的设置的样式就是grouped样式。这两种样式上是有很大差别的。我们用一张表格来对比下

sectionHeader/Footer plain grouped 备注
是否悬浮 悬浮 不悬浮 -
高度 默认为0 默认有一定的高度 如果不实现viewForHeaderInSection/viewForFooterInSection,header/footer背景色同tableView的颜色
分割线 默认无分割线 默认有分割线 可以通过把separatorStyle设置为UITableViewCellSeparatorStyleNone来取消header/footer的分割线

注意

  1. 如果为grouped style,我们要隐藏某个section header/footer,将heightForHeaderInSection/heightForFooterInSection里的实现返回值设置成0是无效的,设置成0等同于默认设置,而它的默认设置是有一定高度的,如果我们要隐藏特定的section header/footer可以用直接返回CGFLOAT_MIN

2.viewForHeaderInSection/viewForFooterInSection方法里不要自行创建header/footer view。虽然我们在这两个代理方法里创建的section header/footer,会被系统回收,但是频繁的创建和销毁对象对系统也有一定的开销,影响滑动体验。所以建议用将header,footer用forHeaderFooterViewReuseIdentifier注册到tableView中,然后依据identifier重用。注意这时的header/footer需要继承UITableViewHeaderFooterView

3.另外,iOS8以后tableView会默认设置estimatedSectionFooterHeightestimatedSectionHeaderHeightestimatedRowHeight。其实这个设置是为了在我们进行动态改变高度时默认的一个高度设置,在实际应用中我们可以不用对它们进行设置,如果你对这三个属性进行了设置,那么在iOS11上会出现一些问题,比如在动态计算高度的情景下,重新reload会出现tableView跳动的情况;heightForHeaderInSection/heightForFooterInSection代理方法没有调用的情况。这种情况下,直接将以上属性值设置为0即可。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 社会阅历浅的人,当冒犯发生时,会第一时间追随原始情绪进行反击,然后这样的反击多半没有深入思考,并缺乏策略,最终的结...
    天空的羁绊阅读 3,841评论 0 0
  • 版权声明:未经本人允许,禁止转载. 1. TableView初始化 1.UITableView有两种风格:UITa...
    萧雪痕阅读 7,901评论 2 10
  • 前言 在写这篇文章之前,我将本文集(iOS开发中的坑)里的一些文章进行了调整,移至iOS开发文集当中。目的,就是为...
    严谨风阅读 3,593评论 0 1
  • 样式 当tableView的样式为UITableViewPlain时默认没有tableHeaderView,tab...
    天空的羁绊阅读 7,142评论 4 4
  • 今天课上要给宝宝们讲授五官的英文,正式进入课堂之后我用手指轻轻点着自己的鼻子,一边说nose 宝贝们笑着模仿我的动...
    阿木先森阅读 1,540评论 0 1