77.下拉重新整理MJRefresh和UITableView的section headerView衝突的原因分析與解決方案
首先修改MJRefreshHeader.h 中的這個 目的是當HeadView已經處於當前螢幕頂端 時不要執行動畫 直接設定偏移量為64
// 恢復inset和offset
if (self.scrollView.mj_insetT > 64) {
[UIViewanimateWithDuration:MJRefreshSlowAnimationDurationanimations:^{
self.scrollView.mj_insetT -=self.mj_h;
// 自動調整透明度
if (self.isAutomaticallyChangeAlpha)self
} completion:^(BOOL finished) {
self.pullingPercent =0.0;
}];
}else{
self.scrollView.mj_insetT =64;
}
2、在匯入Mjrefresh的ViewController中實現UIScrollViewDelegate代理方法scrollViewDidScroll
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if (self.tableView
{
NSLog(@">>>>>>>>>>>>>>>>>>%f",scrollView.contentInset.top);
if (scrollView.contentOffset.y >= -scrollView.contentInset.top
&& scrollView.contentOffset.y > -54 + -64 && scrollView.
{
//注意:修改scrollView.contentInset時,若使當前介面顯示位置發生變化,會觸發scrollViewDidScroll:,從而導致死迴圈。
//因此此處scrollView.contentInset.top必須為-scrollView.contentOffset.y
scrollView.contentInset =UIEdgeInsetsMake(-scrollView.contentOffset.y +4,0, 0,0);
}
elseif (scrollView.contentOffset.y >= -64)//到0說明headerView已經在tableView最上方,不需要再修改了
{
scrollView.contentInset =UIEdgeInsetsMake(64,0, 0,0);
}
}
}
注意 以上解決方案只適用於含有導航欄的ViewController 如果不含有導航欄 自行減去64參考了:http://www.geekcome.com/content-10-2518-1.html