之前有面試問到這個遵倦,由于之前了解的不是很深梦抢,所以回答錯了鞍匾。這次好好總結一下交洗。
在 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當前顯示區(qū)域頂點相對于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內容視圖原點坐標的實際位置的相反數狞玛。
這個例子是一種的特殊情況软驰,只是為了方便理解。