这里只是介绍一下表面看到的:
- tableView 上滑的时候,其实是 tableView 的内容框上移(tableView控件本身并没动),即 tableView 的参考零点上移了,所以 tableView 相对于参考零点就在下面,所以其contentOffset.y是正值
- tableView 下滑的时候,其实是 tableView 的内容框下移(tableView控件本身并没动),即 tableView 的参考零点下移了,所以 tableView 相对于参考零点就在上面,其contentOffset.y是负值
- 大家都知道,现实生活中,即便你原地不动,但是给你变换参考坐标,你的位置值就是变化的,所以你的参考原点变化了,你的位置值就变化了(位置不变,位置值变化)
- tableView 的内容框在上下滚动的时候,其实就是 tableView 的参考原点在上下变化
- 上滑的时候,参考原点跑到了 tableView.frame.origin.y = 0 的上方,那么tableView.frame.origin.y = 0 就相当于跑到了参考原点的下面,所以 tableView.contentOffset.y 就是正的
- 下滑的时候,参考原点跑到了 tableView.frame.origin.y = 0 的下方,那么tableView.frame.origin.y = 0 就相当于跑到了参考原点的上面,所以 tableView.contentOffset.y 就是负的
我们再换一幅图,通过这幅图我们可以这么认为:
其实tableView.contentOffset.y就是一条横线
那么你会问是哪条横线呢?
其实就是 tableView.frame.origin.y 代表的这一条横线
对此,你可能会有疑问,这还要结合最上面的那幅图来解释:
你看,其实tableView.contentOffset.y就是一条横线,就是tableView.frame.origin.y 代表的这一条横线
在目前的例子里,代表的就是导航栏下面的那一条线
你的疑问:tableView.contentOffset.y随着 tableView 滑动不是一直在变化的吗?
是的,的确是的·
它的值的确是在变化的,但是是相对的,相对于内容框的位置的实时值
tableView.contentOffset.y代表的这条线的位置其实并没有变
正是因为 tableView 滑动了,我相对于 tableView 内的内容框的位置变化了,但是其实际位置没有变化
记住一句话,tableView 这个控件的位置和尺寸是固定死的,永远不会变化
既然 tableView 是固定死的,tableView 为什么会有 contentOffSet 呢
这可以用生活中的例子来解释:计算我相对于你的偏移位置
我在家里,坐在沙发上始终不动
你在我家里来回走动,我相对于你的偏移量就会发生变化
我.contentOffSet就会变化
我始终没动,但因为你的走动,导致我的contentOffSet就发生了变化
所以,tableView.contentOffset.y始终就仅仅是tableView.frame.origin.y 代表的这一条横线
就是 tableView 纵向 起始的那条横线
tableView 纵向上从哪里开始的,那个地方的横线就是tableView.contentOffset.y = 0 的横线
也就是tableView.contentOffset.y代表的横线,这条横线横亘在这里
当 tableView 的内容滑动了,tableView.contentOffset.y的值就会变化