@@ -26,7 +26,7 @@ public class PullToRefresh: NSObject {
2626 let refreshView : UIView
2727 var action : ( ( ) -> ( ) ) ?
2828
29- var observes = false
29+ private var isObserving = false
3030
3131 private let animator : RefreshViewAnimator
3232
@@ -91,6 +91,7 @@ public class PullToRefresh: NSObject {
9191
9292 private var KVOContext = " PullToRefreshKVOContext "
9393 private let contentOffsetKeyPath = " contentOffset "
94+ private let contentInsetKeyPath = " contentInset "
9495 private let contentSizeKeyPath = " contentSize "
9596 private var previousScrollViewOffset : CGPoint = CGPointZero
9697
@@ -127,6 +128,11 @@ public class PullToRefresh: NSObject {
127128 if case . Bottom = position {
128129 refreshView. frame = CGRect ( x: 0 , y: scrollView!. contentSize. height, width: scrollView!. bounds. width, height: refreshView. bounds. height)
129130 }
131+ } else if ( context == & KVOContext && keyPath == contentInsetKeyPath && object as? UIScrollView == scrollView) {
132+ if self . state == . Initial {
133+ scrollViewDefaultInsets = scrollView!. contentInset
134+ }
135+
130136 } else {
131137 super. observeValueForKeyPath ( keyPath, ofObject: object, change: change, context: context)
132138 }
@@ -135,21 +141,27 @@ public class PullToRefresh: NSObject {
135141 }
136142
137143 private func addScrollViewObserving( ) {
138- guard let scrollView = scrollView where !observes else {
144+ guard let scrollView = scrollView where !isObserving else {
139145 return
140146 }
141147
142148 scrollView. addObserver ( self , forKeyPath: contentOffsetKeyPath, options: . Initial, context: & KVOContext)
143149 scrollView. addObserver ( self , forKeyPath: contentSizeKeyPath, options: . Initial, context: & KVOContext)
150+ scrollView. addObserver ( self , forKeyPath: contentInsetKeyPath, options: . New, context: & KVOContext)
151+
152+ isObserving = true
144153 }
145154
146155 private func removeScrollViewObserving( ) {
147- guard let scrollView = scrollView where observes else {
156+ guard let scrollView = scrollView where isObserving else {
148157 return
149158 }
150159
151160 scrollView. removeObserver ( self , forKeyPath: contentOffsetKeyPath, context: & KVOContext)
152161 scrollView. removeObserver ( self , forKeyPath: contentSizeKeyPath, context: & KVOContext)
162+ scrollView. removeObserver ( self , forKeyPath: contentInsetKeyPath, context: & KVOContext)
163+
164+ isObserving = false
153165 }
154166}
155167
0 commit comments