用新数据重新加载uitableview导致闪烁

tri*_*ons 17 iphone uitableview ios ios5

我添加了一个无限滚动功能,并意识到每当我重新加载uitableview时,视图都会闪烁......我不知道如何修复此时的闪烁.请帮忙,谢谢!

我确实看到了一个非常相似的问题,但没有解决方案.我尝试了作者发布的那个,但它不起作用:"从父视图中删除tableview,重新加载数据,将表视图放回到父视图中"(UITableView reloadData - 如何停止闪烁)

代码:[self.tableView reloadData];

Sha*_*nak 17

下面的代码对我来说就像一个魅力!

Objective-C的

[UIView performWithoutAnimation:^{
   [self.tableview reloadData];
   [self.tableview beginUpdates];
   [self.tableview endUpdates];
}];
Run Code Online (Sandbox Code Playgroud)

斯威夫特4

UIView.performWithoutAnimation {
    self.tableView.reloadData()
    self.tableView.beginUpdates()
    self.tableView.endUpdates()
}
Run Code Online (Sandbox Code Playgroud)

  • 这么多年过去了,人们仍然在处理闪烁问题...这仅仅意味着苹果应该修复它,而不是我们所有人都在努力解决它...技巧起作用了..但是代码在阅读时没有任何意义.. .beginUpdate 然后 endUpdate ,中间没有任何内容。啊......苹果请修复它:) (3认同)

小智 13

正如您所猜测的那样,调用[self.tableView reloadData]会导致闪烁; 快速反复,特别是在iOS 5.x设备上.但是您可能不想重新加载整个表,只想更新表中可见单元格中的视图.

假设您要更新表的每个单元格以反映下载文件时的最新下载量.一个方法[下载:totalRead:totalExpected:]在我的例子中调用,在下载字节时非常快.

这是不是做的......重装上的每一个小更新表(在这个例子中,开发者可以依靠"的cellForRowAtIndexPath"或"willDisplayCell"的方法执行所有可见单元格的更新):

    - (void)downloading:(PPFile *)file totalRead:(long long)read totalExpected:(long long)expected {
        // Bad! Causes flickering when rapidly executed:
        [self.tableView reloadData];
    }
Run Code Online (Sandbox Code Playgroud)

以下是更好的解决方案.当需要更新单元格的视图时,通过仅从表中获取可见单元格来查找该单元格,然后直接更新该单元格的视图而不重新加载表格:

    - (void)downloading:(PPFile *)file totalRead:(long long)read totalExpected:(long long)expected {
        NSArray *cells = [self.tableView visibleCells];

        for(MYCellView *cell in cells) {
            if(cell.fileReference == file) {
                // Update your cell's view here.
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

编辑:文档建议相同:

调用此方法会导致表视图向其数据源询问指定节的新单元格.表格视图为新单元格的插入设置动画,因为它会将旧单元格设置为动画.如果要提醒用户指定部分的值正在更改,请调用此方法.但是,如果您只想更改指定部分的单元格中的值而不提醒用户,则可以获取这些单元格并直接设置其新值.