Sid*_*kan 10 objective-c uitableview uiviewcontroller ios uirefreshcontrol
我有一个UITableView与UIRefreshControl内侧限定viewDidLoad:的方法UIViewController如下:
- (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];
}
Run Code Online (Sandbox Code Playgroud)
我使用自定义单元格来更新单元格数据.在重新加载数据时UITableView闪烁.有办法避免这种情况吗?
编辑
我已将视频文件链接到示例演示.在UITableView重新加载数据,闪烁.我使用autolayout来更新动态单元格高度.
以下是可以重新创建此问题的示例代码.应该拉UITableView刷新.表视图在主队列上重新加载.正在使用自动布局调整单元格的大小.
小智 12
我今天遇到了同样的问题,我设法使用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()
Run Code Online (Sandbox Code Playgroud)
问题是你一起调用-reloadData和-endRefreshing.两者都想更新视图.你需要将它们分开一点.
其中一个选项可以使用,具体取决于您希望查看单元格更新的位置:
[self.tableView reloadData];
[self.refreshControl performSelector:@selector(endRefreshing) withObject:nil afterDelay:0.5];
[self.refreshControl endRefreshing];
[self.tableView performSelector:@selector(reloadData) withObject:nil afterDelay:0.5];
Run Code Online (Sandbox Code Playgroud)
使用第一个选项可能需要更少的延迟.甚至0.0秒似乎在你的示例代码中起作用.这足以在下一次屏幕刷新时获得-endRefreshing动画.
| 归档时间: |
|
| 查看次数: |
4277 次 |
| 最近记录: |