Ios [self.tableview重载数据];引起闪烁
问题是UI出现然后被更新:给人一种闪烁的感觉 我希望用户进入应用程序时,UI只更新一次,因此我在ViewDidLoad中添加了重载。。这是密码。。任何帮助如何删除此闪烁。。。一些代码示例会有所帮助Ios [self.tableview重载数据];引起闪烁,ios,tableview,reloaddata,Ios,Tableview,Reloaddata,问题是UI出现然后被更新:给人一种闪烁的感觉 我希望用户进入应用程序时,UI只更新一次,因此我在ViewDidLoad中添加了重载。。这是密码。。任何帮助如何删除此闪烁。。。一些代码示例会有所帮助 - (void)viewDidLoad { [super viewDidLoad]; self.myTableView.dataSource = self; self.myTableView.delegate = self; PFQuery * getCollectionInfo = [PFQ
- (void)viewDidLoad {
[super viewDidLoad];
self.myTableView.dataSource = self;
self.myTableView.delegate = self;
PFQuery * getCollectionInfo = [PFQuery queryWithClassName:@"Collection"]; // make query
[getCollectionInfo orderByDescending:@"updatedAt"];
[getCollectionInfo setCachePolicy:kPFCachePolicyCacheThenNetwork];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
[getCollectionInfo findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
CollectionQueryResult = (NSMutableArray *)objects;
[self.tableView reloadData];
// whenevr get result
}
else{
//no errors
}
}];
});
希望以下几行可以帮助您解决延迟和闪烁的问题
dispatch_async(dispatch_get_main_queue()
, ^{
[self.tableView reloadData];
});
您的下载是异步的,因此在显示视图之前无法完成。因此,
CollectionQueryResult
中的所有内容都将显示出来
你可以:
CollectionQueryResult
以便在获得更新之前不会填充表CollectionQueryResult
和对象
,然后仅更新数据已更改的可见单元格(在设置CollectionQueryResult
之前)CollectionQueryResult
和对象的计数,然后根据需要从表视图中插入/删除行。选项2的全部要点是不调用重新加载数据
,因此您需要做更多的工作
如果您获取可见单元格并直接更新它们(这样可以避免任何动画发生),也可以避免调用reloadRowsAtIndexPaths
。请参阅。为什么不直接调用reloadSections方法而不是[self.tableView reloadData]
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];
请参阅cellforrowatinexpath
delegate方法。你可能正在做一些可能会导致轻弹的操作。在我的例子中,我使用动画设置图像视图的图像。因此,每当我重新加载表格时,它都会因为动画而闪烁
我删除了那个动画并为我工作 您的问题是什么,请详细说明您的问题。问题是UI出现后会被更新:产生闪烁的影响。我要求更新单元格时不要使整个TableView闪烁。。我引用了这一点,但实际上没有帮助。默认情况下,tableview仅重新加载可见单元格。我知道我需要这样做[self.tableView重新加载rowsatindexpaths:[self.tableView indexPathsForVisibleRows]带行动画:uitableview行动画无];'但这会产生一个错误:“NSInternalInconsistencyException”,原因:“无效更新:节0中的行数无效。这将停止后台线程相关的崩溃,但不是刷新闪烁。我知道我需要这样做<代码>[self.tableView重新加载rowsatindexpaths:[self.tableView indexPathsForVisibleRows]带行动画:uitableview行动画无]代码>但这会产生错误:“NSInternalInconsistencyException”,原因:“无效更新:节0中的行数无效。如何处理此错误,因为我没有手动传递行数。行数在委托方法中返回。如果更新CollectionQueryResult
则需要调用reloadRowsAtIndexPaths
,insertRowsAtIndexPaths
和deleteRowsAtIndexPaths
,这是基于CollectionQueryResult
的新旧内容之间的差异,但tableview上的图像仍在闪烁。