14
14
@implementation RCTRefreshControl {
15
15
BOOL _isInitialRender;
16
16
BOOL _currentRefreshingState;
17
+ BOOL _refreshingProgrammatically;
17
18
NSString *_title;
18
19
UIColor *_titleColor;
19
20
}
@@ -48,8 +49,9 @@ - (void)layoutSubviews
48
49
_isInitialRender = false ;
49
50
}
50
51
51
- - (void )beginRefreshing
52
+ - (void )beginRefreshingProgrammatically
52
53
{
54
+ _refreshingProgrammatically = YES ;
53
55
// When using begin refreshing we need to adjust the ScrollView content offset manually.
54
56
UIScrollView *scrollView = (UIScrollView *)self.superview ;
55
57
CGPoint offset = {scrollView.contentOffset .x , scrollView.contentOffset .y - self.frame .size .height };
@@ -66,12 +68,12 @@ - (void)beginRefreshing
66
68
}];
67
69
}
68
70
69
- - (void )endRefreshing
71
+ - (void )endRefreshingProgrammatically
70
72
{
71
73
// The contentOffset of the scrollview MUST be greater than 0 before calling
72
74
// endRefreshing otherwise the next pull to refresh will not work properly.
73
75
UIScrollView *scrollView = (UIScrollView *)self.superview ;
74
- if (scrollView.contentOffset .y < 0 ) {
76
+ if (_refreshingProgrammatically && scrollView.contentOffset .y < 0 ) {
75
77
CGPoint offset = {scrollView.contentOffset .x , 0 };
76
78
[UIView animateWithDuration: 0.25
77
79
delay: 0
@@ -124,17 +126,18 @@ - (void)setRefreshing:(BOOL)refreshing
124
126
125
127
if (refreshing) {
126
128
if (!_isInitialRender) {
127
- [self beginRefreshing ];
129
+ [self beginRefreshingProgrammatically ];
128
130
}
129
131
} else {
130
- [self endRefreshing ];
132
+ [self endRefreshingProgrammatically ];
131
133
}
132
134
}
133
135
}
134
136
135
137
- (void )refreshControlValueChanged
136
138
{
137
139
_currentRefreshingState = super.refreshing ;
140
+ _refreshingProgrammatically = NO ;
138
141
139
142
if (_onRefresh) {
140
143
_onRefresh (nil );
0 commit comments