我在UIViewController
的viewDidLoad:
方法中定义了一个带有UIRefreshControl
的UITableView
,如下所示:
- (void)viewDidLoad {
[super viewDidLoad];
self.refreshControl = [[UIRefreshControl alloc] init];
[self.refreshControl addTarget:self action:@selector(refreshMessages) forControlEvents:UIControlEventValueChanged];
UITableViewController *tableViewController = [[UITableViewController alloc] init];
tableViewController.tableView = self.messagesTableView;
tableViewController.refreshControl = self.refreshControl;
}
- (void)refreshMessages {
//load data items
if ([self.refreshControl isRefreshing]) {
[self.refreshControl endRefreshing];
}
[self.messagesTableView reloadData];
}
我使用自动调整单元格来更新单元格数据。重新加载数据时,UITableView
会闪烁。有没有办法避免这种情况?
编辑
我已经链接了 video示例演示文件。 UITableView
重新加载数据,闪烁。我使用自动布局来更新动态单元格高度。
这是一个sample可以重现此问题的代码。应拉动 UITableView 进行刷新。 TableView 在主队列上重新加载。正在使用自动布局调整单元格的大小。
最佳答案
我今天遇到了同样的问题,我设法使用 CATransaction 解决了这个问题,这里是 Swift 中的代码片段,在 UITableViewController 中执行:
CATransaction.begin()
CATransaction.setCompletionBlock { () -> Void in
/*wait for endRefreshing animation to complete
before reloadData so table view does not flicker to top
then continue endRefreshing animation */
self.tableView.reloadData()
}
self.refreshControl!.endRefreshing()
CATransaction.commit()
关于ios - UITableView 使用 UIRefreshControl 闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30315754/