直接在UITableView中加入代码,可以滚动到底部
if (self.tableView.contentSize.height >kScreen_Height) {
[self.tableView setContentOffset:CGPointMake(0, self.tableView.contentSize.height -self.tableView.bounds.size.height) animated:NO];
}
但是放在 viewDidLoad: 中table的datasoure还没有加载完,没有效果,放在 viewDidAppear:中的时候就会出现闪一下的情况,很影响用户体验。
然后就想到如果table加载完了以后马上滚动就不会有闪一下的视觉差,在文档中没有找到tableview加载完以后的响应,于是想到我把[self.table reloadData];然后监测raloadData完了以后在滚动,终于实现了效果。
- (void)viewDidLoad {
[super viewDidLoad];
//其他代码
//滚动到底部代码
[self.tableView reloadData];//这里会自动设置tableView layoutIfNeeded为YES,意味着将会在runloop结束时重绘tableView,并将重绘任务提交到主队列
dispatch_async(dispatch_get_main_queue(),^{
//由于mainQueue是串行的,执行到这里说明上一个提交到mainQueue的task已经完成了(即tableView重绘)
if (self.tableView.contentSize.height >kScreen_Height) {
[self.tableView setContentOffset:CGPointMake(0, self.tableView.contentSize.height -self.tableView.bounds.size.height) animated:NO];
}
});
}
问题解决
网友评论