iOS tableView 滾動到指定行/段 以及遇到的bug 指南

iOS tableView 滾動到指定行/段 以及遇到的bug 指南

滾動方式

本篇中的bug會不定期更新的,有更好解決辦法或者 有 新的Bug探討的請加QQ:1290281526 私聊

選中cell滾動到指定位置

很簡單,一句話完事兒:

/* 
    最近選中的cell 滾動到  指定位置 :
    UITableViewScrollPositionNone, 
    UITableViewScrollPositionTop, // 頂部
    UITableViewScrollPositionMiddle, // 中間
    UITableViewScrollPositionBottom// 底部
*/
[self.tableView scrollToNearestSelectedRowAtScrollPosition:UITableViewScrollPositionTop animated:YES];

/** 滾動到頂部 */
[self.tableView setScrollsToTop:YES];
    
/** 讓指定區(qū)域滾動到可視區(qū)域,如果已經(jīng)在可視區(qū)域 則該方法無效 */
[self.tableView scrollRectToVisible:CGRectMake(0, 0, 100, 100) animated:YES];

滾動到指定的 IndexPath

同樣的只是比上一個方法多了一個參數(shù):indexPath,只要是用過tableView的對這個應該都很熟悉吧。

/* 滾動指定段的指定row  到 指定位置*/
[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];

通過設置ScrollView的contentOffset滾動到指定的位置

這個方法比較靈活,但是問題也是最多的,筆者項目中是多層的tableView嵌套的多級目錄展開問題,就用到了這個同時也出現(xiàn)了一些問題。

/*通過設置contentOffset的方式滾動tableView到指定的位置*/
[self.tableView setContentOffset:CGPointMake(0, 0) animated:YES];

這里面需要一個很重要的參數(shù):CGPoint。
那么,這個位置我們改怎么計算得來?別急,Apple的UITableView組件自帶了一些我們并不熟悉,但是卻很強大的API。

/** 指定section的最頂部的rect */
[self.tableView rectForSection:0];
    
/** 指定cell的rect */
[self.tableView rectForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
    
/** sectionHeader 的rect */
[self.tableView rectForHeaderInSection:0];
    
/** sectionFooter 的rect */
[self.tableView rectForFooterInSection:0];

另外在計算位置的時候可能會用到的UIView的方法:

/* viewB上的viewC相對于viewA的frame */
[viewB convertRect:viewC.frame toView:viewA];

/* viewA上的viewB相對于viewC的frame */
[viewC convertRect:viewB.frame fromView:viewA];

滾動時遇到的bug 以及解決

  • ScrollTop 的時候會出現(xiàn)滑動很大一部分空白區(qū)域。estimatedSectionHeaderHeight動態(tài)計算屬性初始值不要設置太高,高出實際高度這里計算會出問題。

  • 一定要記住 NSIndexPath 對象里面的row 和 section 一定要和數(shù)據(jù)源對應。千萬不要越界!不要越界!不要越界!重要的事情說三遍。

  • 滾動時 如果一旦滾動的幅度比較大,可能出現(xiàn)幾種情況:

    • 1、速度太快,用戶會眼花 【超出某個閾值取消滾動動畫】

    • 2、向下滾動,一旦offset出現(xiàn)負值,容易觸發(fā)下拉刷新 【根據(jù)業(yè)務需要過濾下拉刷新】

    • 3、有過度下滑 出現(xiàn)空白區(qū)域,并且沒能觸發(fā)下拉刷新 不碰觸,不能收回?!救サ魟赢嬀蚈K了】

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,186評論 3 119
  • 一、簡介 <<UITableView(或簡單地說,表視圖)的一個實例是用于顯示和編輯分層列出的信息的一種手段 <<...
    無邪8閱讀 10,959評論 3 3
  • 餐桌上的春天從正月的原野開始。 “正月白蒿二月蒿,三月割了當柴燒?!睍r令對野菜很重要。元宵節(jié)過后,原野上的白蒿嫩苗...
    三門峽745沈莉紅閱讀 884評論 17 25
  • 有一天中午我和好先生左等右等爸爸回家吃飯,但一直都沒有見到他的蹤影,直到下午爸爸才回家,而且還喝得有點微醉,但是看...
    梁蘭芳閱讀 475評論 0 0

友情鏈接更多精彩內(nèi)容