如何缩短拉动距离以激活iOS 6/7中的拉动刷新操作?

时间:2013-11-26 17:01:51

标签: ios uitableview uiwebview uirefreshcontrol

Hey StackOverflow People,

我一直试图弄清楚这个问题已经有一段时间但无济于事,我需要一些帮助。我有一个UITableView靠近我的应用程序底部,并且用户没有足够的屏幕距离来进行刷新。有人知道如何缩短在UIRefreshControlUITableView上激活拉动刷新操作(通过iOS 6/7中的UIWebView)所需的距离吗?

先谢谢大家!

5 个答案:

答案 0 :(得分:30)

你仍然可以使用refreshControl但有一些修改!

将这些代码添加到viewController:

   self.refreshControl.endRefreshing()

和往常一样,在self.refresh()函数的刷新逻辑结束时添加:

SELECT

答案 1 :(得分:11)

根据Apple文档,我看不到任何修改UIRefreshControl参数的方法 链接:https://developer.apple.com/library/ios/documentation/uikit/reference/UIRefreshControl_class/Reference/Reference.html

使用ODRefreshControl之类的第三方组件(自定义滚动距离以激活刷新,修改 #define kMaxDistance 常数)。

或...

请勿使用UIRefreshControl,而是在-scrollViewDidScroll方法中实现自己的逻辑,如:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if ((scrollView.contentOffset.y + scrollView.frame.size.height) >= scrollView.contentSize.height) {
        //refresh logic
    }
}

答案 2 :(得分:0)

您可以进行一些修改使其正确

lazy var refreshControl: UIRefreshControl = {
        let refreshControl = UIRefreshControl()
        refreshControl.tintColor = UIColor.red
        return refreshControl
    }()

//refreshControl.addTarget(self, action: #selector(handleRefresh), for: .valueChanged)

每个PullToRefresh必须具有这样的几行代码,即handleRefresh函数,可以执行刷新页面所需的任何事情。

您只需要注释掉addTarget行并将此函数添加到您的代码中 ```

func scrollViewDidScroll(_ scrollView: UIScrollView) {
        if scrollView.contentOffset.y < -80 { //change 80 to whatever you want
            if  !self.refreshControl.isRefreshing {
                handleRefresh()
            }
        }
    }

我在Ashkan Ghodrat的答案的帮助下编写了这段代码

答案 3 :(得分:0)

对于Swift 3.2及更高版本:

var canRefresh = true

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if scrollView.contentOffset.y < -100 {
        if canRefresh && !self.refreshControl.isRefreshing {
            self.canRefresh = false
            self.refreshControl.beginRefreshing()
            self.handleRefresh()
        }
    } else if scrollView.contentOffset.y >= 0 {
        self.canRefresh = true
    }
}

答案 4 :(得分:-1)

一个行代码

该值是_snappingHeight,您可以将其设置为所需的值:

refreshControl.setValue(100, forKey: "_snappingHeight")