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

Posted

技术标签:

【中文标题】如何自定义 UIRefreshControl 以使下拉高度低于默认值【英文标题】:How to customize UIRefreshControl to make pull-down-height lower than default 【发布时间】:2014-09-06 10:31:31 【问题描述】:

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

我想让上面的值变小。(例如,“50px”)

这可能吗?

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

【问题讨论】:

【参考方案1】:

试试这个:

// 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 和 UIScollView 也可以正常工作。

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

【讨论】:

【参考方案2】:

您可以通过一些修改使其正确

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()
            
        
    

【讨论】:

【参考方案3】:

你可以试试这个方法。在 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 之前修改了视图的高度,您可以根据自己的喜好调整高度。

【讨论】:

以上是关于如何自定义 UIRefreshControl 以使下拉高度低于默认值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用不同的图像和位置自定义 UIRefreshControl?

自定义 UIRefreshControl 动画

使用 Lottie 自定义 UIRefreshControl

为啥自定义 UIRefreshControl 类的背景颜色在 Swift 中没有改变?

Swift:WKWebView 中 UIRefreshControl 的自定义操作

UIRefreshControl 带有两个异步 json 下载来填充 UITableView 行和自定义标题视图