對tableView的contentOffset的理解

tableView往上滾動, contentOffset.y為正,此時對于tableView內部控件而言,原點在哪里?

如圖所示:未開始滾動時,contentOffset.y == 0 和原點 同在一條分割線上,隨著向上滾動的進行,對于tableView內部控件而言原點已經滾動到原來contentOffset.y == 0這條分割線的上方了,而此時這個位置的分割線變成contentOffset.y == 偏移量,不再是0了,是一個正數

// 圖片是加到tableView上的
如果,要想tableView向上滾動的時候,這張圖片跟著一起滾動的話,應該設置圖片的y值為0,高度保持不變. 如果y值設置為offset.y,那么圖片就會固定不動了

#define OMNIBUS_HEADERINSET 214
#define HEADER_HEIGHT 48

 CGPoint offset = _tableView.contentOffset;
 CGFloat headerHeight = _coverInset - offset.y;

// 封面圖上拉 offset.y為正,圖片y值設置為0,高度不變
// 圖片原來高度_coverInset(214) + HEADER_HEIGHT(48),留出48是工具條的高度
// 所以 _coverInset是一個臨界值 等于214 OMNIBUS_HEADERINSET
if (headerHeight < _coverInset) {
        _coverImgView.frame = CGRectMake(_coverImgView.frame.origin.x,
                                         0,
                                         _coverImgView.frame.size.width,
                                         _coverInset + HEADER_HEIGHT);
}

tableView往下滾動, contentOffset.y為負

如圖所示:未開始滾動時,contentOffset.y == 0 和原點 同在一條分割線上,隨著向下滾動的進行,對于tableView內部控件而言原點已經滾動到原來contentOffset.y == 0這條分割線的下方了,而此時這個位置的分割線變成contentOffset.y == 偏移量,不再是0了,是一個負數

// 圖片是加到tableView上的
如果,要想tableView向下滾動的時候,這張圖片粘住原來的位置的話,應該設置圖片的y值為offset.y,并且高度增加. 如果y值設置為0,那么圖片就會不會粘住原來的位置了

// 封面圖下拉 offset.y為負,圖片y值跟隨offset.y變化,高度增加
#define OMNIBUS_HEADERINSET 214
#define HEADER_HEIGHT 48

 CGPoint offset = _tableView.contentOffset;
 CGFloat headerHeight = _coverInset - offset.y;
// 圖片原來高度_coverInset(214) + HEADER_HEIGHT(48),留出48是工具條的高度
// 所以 _coverInset是一個臨界值 等于214 OMNIBUS_HEADERINSET
if (headerHeight > _coverInset) {
 _coverImgView.frame = CGRectMake(_coverImgView.frame.origin.x,
                                         offset.y,
                                         _coverImgView.frame.size.width,
                                         headerHeight + HEADER_HEIGHT);
}
向下滾動.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容