刷新设置:
self.tableView.mj_header = ({
// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的refresh方法)
MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(refresh)];
header.lastUpdatedTimeLabel.hidden = YES;
header.stateLabel.hidden = YES;
// 设置自动切换透明度(在导航栏下面自动隐藏)
header.automaticallyChangeAlpha = YES;
// 隐藏时间
header.lastUpdatedTimeLabel.hidden = YES;
// 设置刷新控件底部的背景色
header.backgroundColor = kBackgroundUIColor;
// 开始刷新,自动刷新
[header beginRefreshing];
header;
});
上拉加载更多 设置:
// 设置回调(一旦进入刷新状态就会调用这个refreshingBlock)
self.tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
[weakSelf fetchMore];
}];
self.tableView.mj_footer.backgroundColor = [UIColor whiteColor];
// 马上进入刷新状态 很少使用
//[self.tableView.mj_footer beginRefreshing];
tableview上拉加载更多页面跳动问题
问题研究:
将cell的高度固定
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return <#固定数值高度#>;
}
然后再向上滑动tableview就不会跳动了。可以确定一下原因是计算高度的问题。至少是有这个的原因。所以就从这里去优化页面。
通过打断点查看tableview代理方法执行顺序
先执行
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
后执行
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
最终的解决方法:
只需在创建tableview时添加下面三行代码即可:
self.tableView.estimatedSectionFooterHeight = 0;
self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0;
自动加载更多
不用滑到底部了再手动的向上拉一下,才去加载更多。
再代理方法中实现加载更多的方法即可:
#pragma mark - 上拉加载更多
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
// if (<#正在加载中#>) {
// return;
// }
if (scrollView.contentOffset.y > scrollView.contentSize.height - scrollView.frame.size.height - 100) {
[self.tableView.mj_footer beginRefreshing];
// [self fetchMore];
}
}
网友评论