ContentSize, ContentOffset, ContentInset等概念

本人有若干成套学习视频, 可试看! 可试看! 可试看, 重要的事情说三遍 包含Java, 数据结构与算法, iOS, 安卓, python, flutter等等, 如有需要, 联系微信tsaievan.

好久没更新简书了, 今天说一点UI基础的知识点. 那就是标题涉及的几个概念.

以tableView为例, 因为tableView是继承自UIScrollView的, 那么当然会有contentSize
  • 有cell, 无contentInset, 无tableHeaderView,tableFooterView的情况
有cell, 无contentInset, 无tableHeaderView,tableFooterView的情况
  • 有cell, 无contentInset, 有tableHeaderView,tableFooterView的情况


    有cell, 无contentInset, 有tableHeaderView,tableFooterView的情况
  • 有cell, 有contentInset, 无tableHeaderView,tableFooterView的情况

有cell, 有contentInset, 无tableHeaderView,tableFooterView的情况
那么如果出现下列状况, tableView的contentOffset.y是多少呢?
计算contentOffset.y
  • 对于情况1来说, contentInset内边距并不是内容的一部分, 所以contentOffset算内容的偏移量是不会把边距算进去的, 那么偏移量就应该从第一个cell的原点开始算, 那么此时的contentOffset.y就应该是0 - 64, 为-64

  • 对于情况2来说, tableHeaderView是内容的一部分, 所以contentOffset算内容的偏移量是要把tableHeaderView算进去的, 那么偏移量就应该从tableHeaderView的原点开始算, 那么此时的contentOffset.y就应该是0

最后我们来考虑一些非常特殊的情况
  • 添加子控件, 不设置contentInset
添加子控件, 不设置contentInset
  • 添加子控件, 设置contentInset
添加子控件, 设置contentInset
  • 添加子控件, 设置contentInset, 设置tableHeaderView, tableFooterView
添加子控件, 设置contentInset, 设置tableHeaderView, tableFooterView
总结, 其实上面说了那么多, 总结起来无非下面几句话:
  • 内容的含义:

    • 内容包括: 1. cell
      1. tableHeaderView / tableFooterView
      1. sectionHeader / sectionFooter
  • contentSize.height: 所有内容的高度

  • contentInset: 在内容周围额外增加的间距(内边距), 始终黏着内容

  • contentOffset: 内容距离frame矩形框偏移了多少

  • frame: 以父控件内容的左上角为坐标原点(0,0)

  • bounds: 以自己内容的左上角为坐标原点(0,0)

PS. 本人有若干成套学习视频, 包含Java, 数据结构与算法, iOS, 安卓, python, flutter等等, 如有需要, 联系微信tsaievan.

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

推荐阅读更多精彩内容