详解UIScrollView和UITableView的滚动区域

一、UIScrollView的四个属性

  • frame : 矩形框,以父控件内容左上角为坐标原点
  • contentSize:内容大小
  • contentOffset:偏移量
  • contentInset:内边距

这几个属性解释的比较抽象啊,下面我就打个比方来解释下这四个属性!!不当之处还望谅解O(∩_∩)O

假设我们透过一个方形的放大镜来回移动,来观察一张地图。(当然忽略这个放大镜的放大效果)

  • frame:就是描述这个放大镜的大小(x,y的值只是相对于父控件来说的)
  • contentSize:就是指的这张地图的尺寸
  • contentOffset:就是指地图左上角和放大镜左上角这两个点的偏移量,就是用来描述我这个放大镜是放在地图的哪个位置的,就是用来决定我是观察地图的什么地方。
  • contentInset:表示增加额外的滚动区域,地图的大小不变,本来放大镜只能在地图内滚动,增加了可以滚动到额外的区域。

二、UITableView的四个属性

因为UITableView是继承自UIScrollView的,所以理所当然UITableView也有上面的这四个属性。

我们大家都有一个印象,我们在创建tableView的时候,只要把数据源设置好了,那么这个tableView就能自动滚动了。说明是系统自动根据我们的数据源(每个cell的高度,多少个cell...)自动设置了contentSize的值。


Snip20160126_5.png

那么我们可以认为contentSize就是值就是所有cell的尺寸了,其实不然,内容的大小确切来说是有三个部分组成的:所有cell的尺寸 + tableview的头尾控件 + 每个组的头尾控件


Snip20160126_2.png
  • 1.cell
  • 2.tableHeaderView\tableFooterView
  • 3.sectionHeader\Footer
    只要记住tableView的内容尺寸只由这三个部分组成。(contentInset是不算入到内容尺寸中的)

三、控制器自带view的frame

iOS6和iOS7对比副本.jpg

在ios7之前,UIViewController和UITableViewController在刚创建的时候,自带view的frame是状态栏下面的整个区域。
在ios7之后,UIViewController的view的frame就改成了整个屏幕。 UITableViewController的tableView的frame还是和之前一样,是状态栏下面的整个区域。
(大家可以自己打印验证下...自己动手丰衣足食O(∩_∩)O哈哈~)

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

推荐阅读更多精彩内容

  • 解决添加到ScrollView上的UITableView控件自动向下偏移64像素的问题 首先理解1:即使UITab...
    CoderZb阅读 5,285评论 1 8
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,229评论 4 61
  • 自从喜欢上了旅行,就一直想学摄影,单反也是我的梦想。然后,现实很残酷。拍出来的效果连手机的效果都不如。所以一直在学...
    时光碎阅读 379评论 5 8
  • 沧海桑田,岁月变迁,只有它永恒,这就是——艺术。艺术是我们生命中不可或缺的伴侣。走进艺术的世界,你将从无知...
    婉儿2017阅读 343评论 2 3
  • 1. 本次课程最有收获的三点内容。 (1)全民K歌案例分析——分享到好友群。 (2)用户价值决定社交网络价值 (3...
    wodeaihuiyi阅读 147评论 0 0