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

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

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

这可能吗?

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

【问题讨论】:

    标签: ios objective-c uirefreshcontrol


    【解决方案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 之前修改了视图的高度,您可以根据自己的喜好调整高度。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-25
          • 2020-06-26
          • 1970-01-01
          • 1970-01-01
          • 2020-07-30
          • 1970-01-01
          相关资源
          最近更新 更多