如何缩短UIRefreshControl上的拉动距离以激活拉动刷新动作?

问题描述 投票:16回答:5

嘿,StackOverflow的人,

我已经尝试解决这个问题已有一段时间了,但无济于事,我需要一些帮助。我的应用程序底部靠近UITableView,并且屏幕距离不足,用户无法进行刷新。有人知道我该如何缩短在UIRefreshControlUITableView内对UIWebView进行拉动刷新动作所需的距离?

提前感谢大家!

ios uitableview uiwebview uirefreshcontrol
5个回答
33
投票

您仍然可以使用refreshControl,但要进行一些修改!

将这些代码添加到您的viewController:

var canRefresh = true

override func scrollViewDidScroll(scrollView: UIScrollView) {

    if scrollView.contentOffset.y < -100 { //change 100 to whatever you want

        if canRefresh && !self.refreshControl.refreshing {

            self.canRefresh = false
            self.refreshControl.beginRefreshing()

            self.refresh() // your viewController refresh function
        }
    }else if scrollView.contentOffset.y >= 0 { 

        self.canRefresh = true
    }
}

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

   self.refreshControl.endRefreshing()

11
投票

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

使用像ODRefreshControl这样的第三方组件(自定义滚动距离以激活刷新,修改 #define kMaxDistance constant)。

或...

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

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

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的回答的帮助下编写了这段代码


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
    }
}

-1
投票

一个行代码

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

refreshControl.setValue(100, forKey: "_snappingHeight")
© www.soinside.com 2019 - 2024. All rights reserved.