1. 程式人生 > >77.下拉重新整理MJRefresh和UITableView的section headerView衝突的原因分析與解決方案

77.下拉重新整理MJRefresh和UITableView的section headerView衝突的原因分析與解決方案

首先修改MJRefreshHeader.h 中的這個  目的是當HeadView已經處於當前螢幕頂端 時不要執行動畫  直接設定偏移量為64

// 恢復insetoffset

if (self.scrollView.mj_insetT > 64) {

            [UIViewanimateWithDuration:MJRefreshSlowAnimationDurationanimations:^{

self.scrollView.mj_insetT -=self.mj_h;

// 自動調整透明度

if (self.isAutomaticallyChangeAlpha)self

.alpha =0.0;

            } 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

.header.state == MJRefreshStateRefreshing)

    {

NSLog(@">>>>>>>>>>>>>>>>>>%f",scrollView.contentInset.top);

if (scrollView.contentOffset.y >= -scrollView.contentInset.top

            && scrollView.contentOffset.y > -54 + -64 && scrollView.

contentOffset.y < -64)

        {

//注意:修改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