需要非常了解tabview的offset、inset、frame這3個屬性,通過計算并控制這3個屬性來顯示下拉刷新操作
- (void)dealHeaderRefresh{
CGFloat offsetY = -(self.tableView.contentInset.top + self.headerView.gg_height);
if (self.tableView.contentOffset.y <= offsetY) { // tabview的偏移量小于等于 (內(nèi)邊距 + 標題欄高度),表示要開始刷新了
self.headerLabel.text = @"松開刷新";
self.headerLabel.backgroundColor = [UIColor greenColor];
}else{
self.headerLabel.text = @"下拉可以刷新";
self.headerLabel.backgroundColor = [UIColor redColor];
}
}
- (void)headerBeginRefresh{
if (self.isHeaderRefresh) return;
self.headerRefresh = YES;
self.headerLabel.text = @"正在刷新";
self.headerLabel.backgroundColor = [UIColor orangeColor];
[UIView animateWithDuration:0.3 animations:^{
// 修改tabview的內(nèi)邊距,讓用戶看到正在刷新這幾個字
UIEdgeInsets contentInset = self.tableView.contentInset;
contentInset.top += self.headerView.gg_height;
self.tableView.contentInset = contentInset;
self.tableView.contentOffset = CGPointMake(self.tableView.contentOffset.x, - contentInset.top);
}];
// 發(fā)送數(shù)據(jù)請求
[self loadNewTopics];
}
- (void)headerEndRefresh{
self.headerRefresh = NO;
[UIView animateWithDuration:0.3 animations:^{
// 修改tabview的內(nèi)邊距,隱藏起來
UIEdgeInsets contentInset = self.tableView.contentInset;
contentInset.top -= self.headerView.gg_height;
self.tableView.contentInset = contentInset;
}];
self.headerLabel.text = @"下拉可以刷新";
self.headerLabel.backgroundColor = [UIColor redColor];
}

演示效果.gif