快速拉动刷新
我有一个带scrollview
refreshcontroller
的scrollview
..
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
屏幕时,它正在工作。 但问题是,当我没有收到太多数据并且它没有overflowing
, pull and refresh
function不起作用。 🙁
我没有使用tableview
。
任何人都可以帮我解决这个问题吗?
self.scrollView.scrollEnabled = true self.scrollView.alwaysBounceVertical = true
var alwaysBounceVertical:Bool //默认NO。 如果是,并且弹跳为是,即使内容小于边界,也允许垂直拖动
iOS 10更新
alwaysBounceVertical
并不完全正确,并且已经引入了refreshControl
:
- 所有iOS版本:如果
contentSize
小于frame
则始终需要bounces
- iOS 10之前的版本:小内容也需要
alwaysBounceVertical
- iOS 10+:使用
refreshControl
通知UIScrollView
存在refreshControl
– iOS 10
UIRefreshControl
现在由UIScrollView
支持,使用refreshControl
就像以前操作系统中的UITableView
一样。
这意味着拖拽和拉下体验,完美无瑕,无漂移。
按照以下动画中的白色箭头点击+拖动:它们保持同步
来重播动画
– iOS 9及更早版本
您可以手动将UIRefreshControl
添加到UIScrollView
,但该视图无法识别此类元素,并且刷新的拉力趋于漂移。
注意在下面的动画上刷新是多么困难:白色箭头的滚动漂移,并且需要更大的距离来触发控件
来重播动画
使用此滚动视图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类参考