@@ -22,7 +22,14 @@ open class PullToRefresh: NSObject {
2222 open var springDamping : CGFloat = 0.4
2323 open var initialSpringVelocity : CGFloat = 0.8
2424 open var animationOptions : UIViewAnimationOptions = [ . curveLinear]
25-
25+ open var shouldBeVisibleWhileScrolling : Bool = false {
26+ willSet{
27+ if shouldBeVisibleWhileScrolling {
28+ sendRefreshViewToScrollView ( )
29+ }
30+ }
31+ }
32+
2633 let refreshView : UIView
2734 var action : ( ( ) -> ( ) ) ?
2835
@@ -58,6 +65,15 @@ open class PullToRefresh: NSObject {
5865 // MARK: - State
5966
6067 open fileprivate( set) var state : State = . initial {
68+ willSet{
69+ switch newValue {
70+ case . finished:
71+ if shouldBeVisibleWhileScrolling {
72+ sendRefreshViewToScrollView ( )
73+ }
74+ default : break
75+ }
76+ }
6177 didSet {
6278 animator. animate ( state)
6379 switch state {
@@ -243,6 +259,9 @@ private extension PullToRefresh {
243259 } ,
244260 completion: { _ in
245261 scrollView. bounces = true
262+ if self . shouldBeVisibleWhileScrolling {
263+ self . bringRefreshViewToSuperview ( )
264+ }
246265 }
247266 )
248267
@@ -287,4 +306,22 @@ private extension PullToRefresh {
287306
288307 return scrollView. contentOffset. y <= - defaultInsets. top
289308 }
309+
310+ func bringRefreshViewToSuperview( ) {
311+ guard let scrollView = scrollView, let superView = scrollView. superview else { return }
312+ guard let scrollViewIndex = superView. subviews. index ( of: scrollView) else { return }
313+ let frame = scrollView. convert ( refreshView. frame, to: superView)
314+ refreshView. removeFromSuperview ( )
315+ superView. insertSubview ( refreshView, at: scrollViewIndex + 1 )
316+ refreshView. frame = frame
317+ }
318+
319+ func sendRefreshViewToScrollView( ) {
320+ refreshView. removeFromSuperview ( )
321+ guard let scrollView = scrollView else { return }
322+ scrollView. addSubview ( refreshView)
323+ refreshView. frame = scrollView. defaultFrame ( forPullToRefresh: self )
324+ scrollView. sendSubview ( toBack: refreshView)
325+ }
326+
290327}
0 commit comments