如何自定义UIRefreshControl以使下拉高度低于默认值

时间:2014-09-06 10:31:32

标签: ios objective-c uirefreshcontrol

在iOS App中的UIRefreshControl中,我认为默认设置是当我将UITableView(UISrollView)拉下约“100px”时,刷新开始。

我想使上述值更小。(例如,“50px”)

这可能吗?

如果可能,请告诉我示例代码。

3 个答案:

答案 0 :(得分:2)

试试这个:

// definition
extension UIRefreshControl {
    func refreshManually() {
        beginRefreshing()
        sendActions(for: .valueChanged)
    }
}
// usage
var isRefreshingManually = false
func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if scrollView.contentOffset.y < -80.0 {
        if !isRefreshingManually && !refreshControl.isRefreshing {
            isRefreshingManually = true
            refreshControl.refreshManually()
        }
    } else if scrollView.contentOffset.y >= 0 {
        isRefreshingManually = false
    }
}

我的示例代码适用于UICollectionView,但是UITableView&amp; UIScollView也运行良好。

将我的代码中的“-80.0”替换为您想要的阈值。

答案 1 :(得分: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()
            }
        }
    }

答案 2 :(得分:0)

您可以尝试此方法。在出现UITableView(UIScrollView)之前添加UIRefreshControl时,视图的高度可能大于视图在屏幕上显示的实际高度,因此UIRefreshControl的刷新范围大于实际的

let ori = tableView.frame
let temp_frame = CGRect.init(x: ori.origin.x, y: ori.origin.y, width: 
ori.size.width, height: ori.size.height/1.3 )
tableView.frame = temp_frame
tableView.addSubview(UIRefreshControl())
tableView.frame = ori

此代码在添加refreshControl之前修改了视图的高度,您可以根据自己的喜好调整高度。