// tableview滚动到顶部的最佳方法
// ([self.tableV scrollToTop]; 有时无效),另外预估高度也可能会是tableview不能完全滚动到顶部
[self.tableV scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:NO];
// cell使用masonry布局时,不要使用预估高度, 代理方法和属性都不要设置预估高度
- (UITableView *)tableV{
if (!_tableV) {
_tableV = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
_tableV.delegate = self;
_tableV.dataSource = self;
_tableV.mj_header = self.refreshHeader;
_tableV.mj_footer = self.refreshFooter;
// 使用masonry布局cell时,不要使用预估高度,会冲突
// _tableV.estimatedRowHeight = 0;
// _tableV.estimatedSectionHeaderHeight = 0;
// _tableV.estimatedSectionFooterHeight = 0;
_tableV.contentInset = UIEdgeInsetsMake(kFitWidth(10), 0, kTabBarSafeH + kFitWidth(44), 0);
_tableV.backgroundColor = [UIColor nf_bgColor];
_tableV.separatorStyle = UITableViewCellSeparatorStyleNone;
}
return _tableV;
}
// 有没有数据都要刷一次最新的
[self.tableV reloadData];
// 不要在reloadData的时候立刻执行滚动操作,这样会导致无法完全滚动到顶部
// 因为reloaddata是需要时间的,所以可以等主线程空闲的时候再执行滚动操作,这样就不会相互干扰, 先刷新,在滚动
dispatch_async(dispatch_get_main_queue(), ^{
if (self.dataSource.count > 0) {
// 最后参数值为YES,有滚动到顶部的过渡动画效果。([self.tableV scrollToTop]; 有时无效)
[self.tableV scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
}
});