快速拉动刷新

我有一个带scrollview 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 refreshfunction不起作用。 🙁

我没有使用tableview

任何人都可以帮我解决这个问题吗?

 self.scrollView.scrollEnabled = true self.scrollView.alwaysBounceVertical = true 

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

iOS 10更新

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

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

– iOS 10

UIRefreshControl现在由UIScrollView支持,使用refreshControl就像以前操作系统中的UITableView一样。
这意味着拖拽和拉下体验,完美无瑕,无漂移。
按照以下动画中的白色箭头点击+拖动:它们保持同步

iOS 10

来重播动画

– iOS 9及更早版本

您可以手动将UIRefreshControl添加到UIScrollView ,但该视图无法识别此类元素,并且刷新的拉力趋于漂移。
注意在下面的动画上刷新是多么困难:白色箭头的滚动漂移,并且需要更大的距离来触发控件

iOS 9

来重播动画


使用此滚动视图extension绕过refreshControl OS差异:

 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上找到此解决方案。

是的我们可以使用刷新控制到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() } 

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

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

UIRefreshControl类参考