先解释一下这个需求,因为我们项目的用的MJ第三方做刷新的,但是MJ刷新时,刷新完屏幕会跳一下,让人很不爽,所以想要像微信聊天加载消息那样平顺,于是乎,在网上搜索一通,找到了一个很接近的demo,效果还是很理想的。
有个第三方使用系统原生的控件实现了微信聊天消息下拉刷新效果,ASHMessageTableViewDemo。
这个第三方很简单,就是实现了一个headerView 继承自UIView 添加一个UIActivityIndicatorView;
下拉刷新只需要利用UIScrollViewDelegate 一个方捕捉屏幕滑动到顶部的事件
`
-(void)scrollViewDidScroll:(UIScrollView*)scrollView
{
if(scrollView.contentOffset.y<=0&&_isRefresh==NO) {
[selfrefreshTableView];
}
}
`
剩下就是在哪里需要展示headeView 时候设置hidden 为no
数据加载完在置为yes;
还有就是这样设置的话,当数据加载完后,顶部会留出headerView 起初设置的宽度消失不了,我在加载完所有数据时设置headerView的高度为0;但这样的话就会感觉屏幕会跳一下 ,于是我是这样做的,将下面代码判断无数据时隐藏headerView的地方就行了;
//在刷新无数据时候去除刷新控件
`
[UIViewanimateWithDuration:0.5animations:^{
_headerView.frame=CGRectMake(0,0,SCREEN_WIDTH,0);
_tableView.tableHeaderView=_headerView;
}];
`