簡體   English   中英

為什么嘗試向上滾動表格時UITableView內容會“跳起來”?

[英]Why does my UITableView content 'jump up' when trying to scroll up the table?

對此的最好解釋是在我剛剛制作的這個視頻中

不過,對於那些無法觀看視頻的人,我將在這里進行描述,但是我真的建議您觀看視頻,因為它更具描述性。

我有一個帶有UITableView的控制器,並且我將其簡化為盡可能簡單的形式。 初始加載時,將提取10條數據。 還有一個UIBarButtonItem可以隨時提取10個其他數據。

現在,每個單元格還具有2個可變高度標簽。 “標題”標簽最多可顯示2行。 並且“字幕”標簽最多可以顯示5行。 [注意:如果我在每個標題中都放置了相同的文本,在每個字幕中都放置了相同的文本,因此請不要更改這些標簽的大小...我要描述的這個問題不是問題。 因此,為什么在視頻中我說我認為這與自定義單元有關。

現在,這是問題所在:初始加載時,我們得到10個像元。 A,B,C ...,I,J。我向下滾動到J。然后按按鈕以獲取10個以上的值。 我現在有單元格A-> T(20個單元格)。 而且我目前仍在查看單元格J。 問題是...如果我嘗試在單元格J和單元格A之間向上滾動...內容將跳轉。 單元格K到T都很好,您可以在無限時間內上下滾動它們。 但是,如果我從J,I,H,G,F滾動...,每個人都會“跳躍”。 跳躍是指……我的手指向下移動,內容向下移動,每隔100像素左右,內容將向上回跳80像素。 (我確實推薦該視頻,它比我現在給出的描述要好得多)。 現在,如果我們在單元格F處,我可以自由地向下滾動並返回到單元格的F->T。J,I,H,G,F將不再跳躍,因為它們已經“跳躍”一次。 但是,如果我向上滾動到E,D,C,B,A ...我還沒有滾動到它...每個人的內容在向上滾動時都會“跳”起來。

tl; dr: UITableView有0..N行。 X是介於0..N(含)之間的值。 用戶可以獲取其他行Y,這將使新的TableView計數為0 ..(N + Y)。 問題是...在初始加載時,用戶可以滾動到X行。然后再獲取Y行。 然后,向上滾動到第0行。(X-1)將出現“內容跳躍”問題,其中,當用戶手指在設備上向下移動以向下滾動內容時,內容將“跳”回50像素,每個顯示的單元格在0 ..(X-1)之間。 單元格的X ..(N + Y)沒有此問題。 單元格一旦經歷了“跳轉內容”問題,它將不會再次經歷,除非完成另一次提取。

每當滾動表視圖時,都會調用cellforrowatindexpath方法並創建一個新單元格。

因此,如果您同時進行數據調用,則表視圖中會出現明顯的滯后。

這是在后台線程上調用某些東西的示例方法。

(IBAction)backgroundQueue:(id)發送者{

// call the same method on a background thread
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    [NSThread sleepForTimeInterval:3];
    int i = arc4random() % 100;

    // update UI on the main thread
    dispatch_async(dispatch_get_main_queue(), ^{
        self.title = [[NSString alloc]initWithFormat:@"Result: %d", i];
    });

});

}`

嘗試將數據調用方法放在后台線程上,該方法允許將主線程用於UI更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM