objective-c - tableView中只不顯示資料來源的前幾個,稍微向下拖曳就會顯示完全,什麼原因?
曾经蜡笔没有小新
曾经蜡笔没有小新 2017-05-02 09:29:21
0
1
605

tableView 的cell中加入了計算cell的高度並且呼叫代理方法,返回給視圖控制器
當伺服器返回資料來源的時候,刷新tableView。
但是,此時執行的cellForRowIndexPath 的indexPaht 是從第四行開始的,,
將前邊的幾個給跳過了,
我試著將cell的高度寫成定值,
結果cell的數量正常,
這會是什麼問題?

曾经蜡笔没有小新
曾经蜡笔没有小新

全部回覆(1)
迷茫

應該是高度計算滯後了。
tableView的顯示順序大致是:
請求 sectionNumbernumberForSection 取得總共有多少個section和cell。 sectionNumbernumberForSection 获取一共有多少个section和cell。
请求 heightForRow:atIndexPath 获取即将显示在界面上的 cell 的高度。
然后请求 cellForRow 获取这个 cell 的实例。
然后设置 cell 的高度等,layout 之后调用 willDisplay請求 heightForRow:atIndexPath 取得即將顯示在介面上的 cell 的高度。

接著請求 cellForRow 取得這個 cell 的實例。

接著設定 cell 的高度等,layout 之後呼叫 willDisplay 等回呼方法,然後顯示在介面上。

所以你刷新 tableView 時高度這部分的處理應該是,先根據資料來源計算cell高度而不是讓cell實例計算好了再回調給控制器。當然,你也可以在cell中計算,例如在cell中有個類別方法,根據傳入的cell資料計算,並由控制器主動呼叫這個方法。大概程式碼如下:

在 controller 或 tableView 的 delegate 實作類別中:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSDictionary *cellData = self.dataSource[indexPath.row];
    return [MyTableViewCell cellHeightForData:cellData];
}
🎜MyTableViewCell:🎜
+ (CGFloat)cellHeightForData:(NSDictionary *)cellData
{
    // 根据 cellData 计算 cell 的高度
    return height;
}
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板