之前有面试问到这个,由于之前了解的不是很深,所以回答错了。这次好好总结一下。
在 UITableView 和 UIScrollView 中,contentOffset 是经常会用到的一个属性。那么它的正负到底如何去判断,和上拉下拉又有什么关系呢?
我们已知控制器的坐标原点是屏幕的左上角(0,0)点,这样说不是很严谨但是方便理解。以下举例都是建立在这个假设之上。
那么,基于这个原点,在屏幕之上。坐标往右、往下,都是正数;往上、往左,都是负数。这是我们理解的前题条件。
官方给出的 contentOffset 定义:
The point at which the origin of the content view is offset from the origin of the scroll view.
是scrollview当前显示区域顶点相对于frame顶点的偏移量。通俗的讲就是 ScrollView 内容 相对于 屏幕原点的位置。
所以,当 ScrollView(UITableView)向上滑动的时候,content 的大部分视图会滑动到我们看不到的屏幕上方。这时,content的原点坐标是(0, y<0)。因为在屏幕原点上方,所以是小于0的。那contentOffset的坐标是多少呢?
它的y坐标是:0-y=-y, (其中, y<0)。故,contentOffset的y坐标大于0;
同理,当 ScrollView(UITableView)向下滑动的时候,就如我们下拉刷新的时候一样。这时,content的原点坐标是(0, y>0)。因为在屏幕原点下方,所以是大于0的。那contentOffset的坐标是多少呢?
它的y坐标依然是:0-y=-y, (其中, y>0)。故,contentOffset的y坐标小于0;
这样,我们可以看出,contentOffset的实际坐标位置是:content内容视图原点坐标的实际位置的相反数。
这个例子是一种的特殊情况,只是为了方便理解。
网友评论