对此最好的解释是在我刚拍的这段视频中。
我会尝试在这里描述它,但对于那些不能观看视频,但我真的建议看视频,因为它更具有描述性。
我有一个带有UITableView的控制器,我已经将它简化为尽可能简单。在初始加载时,将获取10条数据。还有一个UIBarButtonItem,可以随时获取10条额外的数据。
现在每个单元格也有两个可变高度标签。“标题”标签可以显示最多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: A UITableView有0.N行。X是0.N之间的一个值。用户可以获取额外的行Y,这将使新的TableView计数0.(N+Y)。问题是..。在初始加载时,用户可以滚动到行X,然后获取Y附加行。然后,滚动到行0..(X-1)将出现“内容跳跃”问题,当用户手指在设备上向下移动以向下滚动内容时,内容将“跳”回50个像素,每个显示的单元格介于0..(X-1)之间。单元格的X.(N+Y)没有这个问题。一旦一个单元格经历了这个“跳转内容”问题,它将不会再次通过,除非完成另一个提取。
发布于 2015-06-24 19:15:44
每当您滚动表视图时,将调用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更新。
https://stackoverflow.com/questions/31034378
复制相似问题