快速拉动刷新

sol*_*nqu 5 ios uirefreshcontrol swift

我有我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()
    }
Run Code Online (Sandbox Code Playgroud)

我正在添加subview一个scrollView.当页面内容是overflowing屏幕时,它正在工作.但问题是,当我没有收到太多数据而事实并非如此overflowing,该pull and refresh功能无效.:(

我没用tableview.

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

Swi*_*ect 10

iOS 10更新

alwaysBounceVertical并不完全正确,并refreshControl已被介绍:

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

- iOS 10

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

iOS 10

LinkedIn重播动画

- iOS 9及更早版本

您可以UIRefreshControl手动添加到a UIScrollView,但该视图不知道这样的元素,并且刷新的拉力趋于漂移.
注意在下面的动画上刷新是多么困难:白色箭头的滚动漂移,并且需要更大的距离来触发控件

iOS 9

LinkedIn重播动画


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)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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


dus*_*sty 9

self.scrollView.scrollEnabled = true
self.scrollView.alwaysBounceVertical = true
Run Code Online (Sandbox Code Playgroud)

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


Ket*_*tan 5

是的,我们可以对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()  


 }
Run Code Online (Sandbox Code Playgroud)