【问题标题】:swift pull to refresh快速拉动刷新
【发布时间】:2015-06-29 18:46:22
【问题描述】:

我有我的refreshcontrollerscrollview..

  self.refreshControl = UIRefreshControl()
        self.refreshControl.attributedTitle = NSAttributedString(string: "Frissítéshez húzzad! :)")
        self.refreshControl.addTarget(self, action: "refresh:", forControlEvents: UIControlEvents.ValueChanged)
        self.scrollView.addSubview(refreshControl)

func refresh(sender:AnyObject)
    {

//my refresh code here..

            self.refreshControl.endRefreshing()
    }

我将subview 添加到scrollView。当页面内容为overflowing 屏幕时,它正在工作。但是当我没有收到太多数据并且不是overflowingpull and refresh 功能不起作用时,就会出现问题。 :(

我没有使用tableview

谁能帮我解决这个问题?

【问题讨论】:

    标签: ios swift uirefreshcontrol


    【解决方案1】:
    self.scrollView.scrollEnabled = true
    self.scrollView.alwaysBounceVertical = true
    

    var alwaysBounceVertical: Bool // 默认 NO。如果 YES 并且弹跳为 YES,即使内容小于边界,也允许垂直拖动

    【讨论】:

      【解决方案2】:

      此 UIRefreshControl 不适用于 UIScrollView。它应该通过关联的表视图控制器对象与表链接。

      注意:由于刷新控件是专门为在由表视图控制器管理的表视图中使用而设计的,因此在不同的上下文中使用它可能会导致未定义的行为。

      UIRefreshControl Class Reference

      【讨论】:

      • 根据引用的文档,三年后,看起来现在支持 ScrollViews。 (我通过测试确认了)。
      【解决方案3】:

      iOS 10 更新

      alwaysBounceVertical不完全正确,已经引入refreshControl

      1. 所有 iOS 版本: 如果contentSize 小于frame,则始终需要bounces
      2. iOS 10 之前的版本: 小内容也需要alwaysBounceVertical
      3. iOS 10+: 使用refreshControl 通知UIScrollView UIRefreshControl 的存在

      - iOS 10

      UIRefreshControl 现在由UIScrollView 支持,使用refreshControl 就像在以前的操作系统中使用UITableView
      这意味着拖放体验完美无缺,没有漂移。
      在下面动画中的白色箭头上点击+拖动:它们保持同步

      ↻ replay animation

      - iOS 9 及更早版本

      您可以手动将UIRefreshControl 添加到UIScrollView,但该视图不知道这样的元素,并且拉动刷新往往会漂移。
      请注意它是多么困难拉动刷新下面的动画:白色箭头的滚动漂移,需要更大的距离才能触发控件

      ↻ replay animation


      使用此滚动视图绕过refreshControl 操作系统差异extension

      var _refreshControl : UIRefreshControl? {
          get {
              if #available(iOS 10.0, *) {
                  return refreshControl
              } else {
                  return subviews.first(where: { (view: UIView) -> Bool in
                      view is UIRefreshControl
                  }) as? UIRefreshControl
              }
          }
      
          set {
              if #available(iOS 10.0, *) {
                  refreshControl = newValue
              } else {
                  // Unique instance of UIRefreshControl added to subviews
                  if let oldValue = _refreshControl {
                      oldValue.removeFromSuperview()
                  }
                  if let newValue = newValue {
                      insertSubview(newValue, at: 0)
                  }
              }
          }
      }
      

      ► 在GitHub 上找到此解决方案。

      【讨论】:

      • return refreshControl 行 (iOS 10) 再次递归地调用了 getter。我不得不将 _refreshControl 重命名为 customRefresh 之类的其他名称。
      • 我想禁用集合视图弹跳效果并启用刷新控件。我该怎么做?
      【解决方案4】:

      是的我们可以对 UIScrollView、UITableview、UicollectionVIew 使用刷新控制..

      这是PULL TO REFRESH的代码,

      var refreshControl: UIRefreshControl!
      override func viewDidLoad()  {
          super.viewDidLoad()
      
          scrollView.alwaysBounceVertical = true
          scrollView.bounces  = true
          refreshControl = UIRefreshControl()
          refreshControl.addTarget(self, action: #selector(didPullToRefresh), for: .valueChanged)
          self.scrollView.addSubview(refreshControl)
       }
      
      @objc func didPullToRefresh() {
      
         print("Refersh")
      
        // For End refrshing
        refreshControl?.endRefreshing()  
      
      
       }
      

      【讨论】:

        猜你喜欢
        • 2021-07-07
        • 1970-01-01
        • 1970-01-01
        • 2018-10-05
        • 1970-01-01
        • 1970-01-01
        • 2015-11-01
        • 1970-01-01
        • 2019-04-28
        相关资源
        最近更新 更多