繁体   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