MJRefresh 2014年版本 下拉刷新箭头回不去,不会隐藏掉

发布于 2022-09-02 01:33:18 字数 2407 浏览 20 评论 0

我们公司的旧项目导入了MJRefresh 2014年版本,里面有个bug, 没有找到原因!就是当tableview页面下拉刷新时候,刷新请求还没有结束,然后跳转到别的页面。然后回来刷新请求的页面,这时候有很大的几率刷新的箭头、文字描述这些都收不回去啊。而且如果多次进行切换,头部控件会一直往下移!我在viewWillDisappear,viewDidDisappear:调用[self.tableView headerEndRefreshing];也没效果!!!有人遇到类似情况吗????

感觉问题是出在MJRefresh的MJRefreshHeaderView.m里面的下面这个方法中,但找不到该怎么改。。。

#pragma mark 设置状态

  • (void)setState:(MJRefreshState)state
    {
    // 1.一样的就直接返回
    if (_state == state) return;

    // 2.保存旧状态
    MJRefreshState oldState = _state;

    // 3.调用父类方法
    [super setState:state];

    // 4.根据状态执行不同的操作
    switch (state) {

       case MJRefreshStatePulling: // 松开可立即刷新
       {
           // 设置文字
           _statusLabel.text = MJRefreshHeaderReleaseToRefresh;
           // 执行动画
           [UIView animateWithDuration:MJRefreshAnimationDuration animations:^{
               _arrowImage.transform = CGAffineTransformMakeRotation(M_PI);
               UIEdgeInsets inset = _scrollView.contentInset;
               inset.top = _scrollViewInitInset.top;
               _scrollView.contentInset = inset;
           }];
           break;
       }
           
       case MJRefreshStateNormal: // 下拉可以刷新
       {
           // 设置文字
           _statusLabel.text = MJRefreshHeaderPullToRefresh;
           // 执行动画
           [UIView animateWithDuration:MJRefreshAnimationDuration animations:^{
               _arrowImage.transform = CGAffineTransformIdentity;
               UIEdgeInsets inset = _scrollView.contentInset;
               inset.top = _scrollViewInitInset.top;
               _scrollView.contentInset = inset;
           }];
           
           // 刷新完毕
           if (MJRefreshStateRefreshing == oldState) {
               // 保存刷新时间
               self.lastUpdateTime = [NSDate date];
           }
           break;
       }
           
       case MJRefreshStateRefreshing: // 正在刷新中
       {
           // 设置文字
           _statusLabel.text = MJRefreshHeaderRefreshing;
           // 执行动画
           [UIView animateWithDuration:MJRefreshAnimationDuration animations:^{
               _arrowImage.transform = CGAffineTransformIdentity;
               // 1.增加65的滚动区域
               UIEdgeInsets inset = _scrollView.contentInset;
           inset.top = _scrollViewInitInset.top + MJRefreshViewHeight;
               _scrollView.contentInset = inset;
               // 2.设置滚动位置
               _scrollView.contentOffset = CGPointMake(0, - _scrollViewInitInset.top - MJRefreshViewHeight);
           }];
           break;
       }
           
       default:
           break;

    }
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

惟欲睡 2022-09-09 01:33:18

问题解决,在控制器的viewWillDisappear方法里面调用一下[_header endRefreshing]即可~

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文