@onekeyfe/react-native-pager-view 3.0.172 → 3.0.173

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -33,9 +33,6 @@ static Event RNCScrollerMetrics(UIScrollView *scroll, CGPoint velocity, CGPoint
33
33
  @end
34
34
 
35
35
  @implementation RNCNativeScrollerComponentView {
36
- #if DEBUG
37
- NSUInteger _offsetDiagSequence;
38
- #endif
39
36
  RNCNativeScrollerShadowNode::ConcreteState::Shared _state;
40
37
  RNCNativeVerticalScrollView *_scrollView;
41
38
  UIView<RCTComponentViewProtocol> *_reactContent;
@@ -54,24 +51,6 @@ static Event RNCScrollerMetrics(UIScrollView *scroll, CGPoint velocity, CGPoint
54
51
  NSNumber *_lastContentViewportHeight;
55
52
  }
56
53
 
57
- - (void)offsetDiag:(NSString *)reason
58
- {
59
- #if DEBUG
60
- Class logClass = NSClassFromString(@"ReactNativeNativeLogger.OneKeyLog") ?: NSClassFromString(@"OneKeyLog");
61
- SEL selector = NSSelectorFromString(@"debug::");
62
- if (logClass == nil || ![logClass respondsToSelector:selector]) return;
63
- NSString *message = [NSString stringWithFormat:
64
- @"[HOME-OFFSET-DIAG] scroller phase=%@ seq=%lu wallMs=%.0f mono=%.6f host=%p tag=%ld scroll=%p generation=%lu physicalY=%.4f insetTop=%.4f logicalY=%.4f contentHeight=%.4f boundsHeight=%.4f adjustedBottom=%.4f needsClamp=%d drag=%d decel=%d refresh=%d",
65
- reason, (unsigned long)++_offsetDiagSequence, NSDate.date.timeIntervalSince1970 * 1000, CACurrentMediaTime(),
66
- (__bridge void *)self, (long)self.tag, (__bridge void *)_scrollView, (unsigned long)_generation,
67
- _scrollView.contentOffset.y, _scrollView.contentInset.top, _scrollView.contentOffset.y + _scrollView.contentInset.top,
68
- _scrollView.contentSize.height, _scrollView.bounds.size.height, _scrollView.adjustedContentInset.bottom,
69
- _needsContentClamp, _scrollView.dragging, _scrollView.decelerating, _refreshControl.refreshing];
70
- typedef void (*LogFunction)(id, SEL, NSString *, NSString *);
71
- ((LogFunction)[logClass methodForSelector:selector])(logClass, selector, @"NativeScroller", message);
72
- #endif
73
- }
74
-
75
54
  + (ComponentDescriptorProvider)componentDescriptorProvider
76
55
  {
77
56
  return concreteComponentDescriptorProvider<RNCNativeScrollerComponentDescriptor>();
@@ -200,9 +179,7 @@ static Event RNCScrollerMetrics(UIScrollView *scroll, CGPoint velocity, CGPoint
200
179
  _needsContentClamp |= size.height < _scrollView.contentSize.height;
201
180
  CGPoint offset = _scrollView.contentOffset;
202
181
  BOOL wasPulling = offset.y < -_scrollView.adjustedContentInset.top;
203
- [self offsetDiag:@"content-size-before"];
204
182
  _scrollView.contentSize = size;
205
- [self offsetDiag:@"content-size-after"];
206
183
  // UIKit can synchronously discard a pull when content becomes empty.
207
184
  // Upper-range shrink correction remains owned by the deferred clamp.
208
185
  if (wasPulling && _scrollView.contentOffset.y != offset.y) {
@@ -220,12 +197,10 @@ static Event RNCScrollerMetrics(UIScrollView *scroll, CGPoint velocity, CGPoint
220
197
  - (void)updateLayoutMetrics:(const LayoutMetrics &)layoutMetrics
221
198
  oldLayoutMetrics:(const LayoutMetrics &)oldLayoutMetrics
222
199
  {
223
- [self offsetDiag:@"layout-before"];
224
200
  CGSize previous = _scrollView.bounds.size;
225
201
  [super updateLayoutMetrics:layoutMetrics oldLayoutMetrics:oldLayoutMetrics];
226
202
  [self updateFabricContentOrigin];
227
203
  [self emitContentViewportChangeIfNeeded];
228
- [self offsetDiag:@"layout-after"];
229
204
  if (!CGSizeEqualToSize(previous, _scrollView.bounds.size)) {
230
205
  _needsContentClamp = YES;
231
206
  [self scheduleContentClamp];
@@ -288,7 +263,6 @@ static Event RNCScrollerMetrics(UIScrollView *scroll, CGPoint velocity, CGPoint
288
263
  - (void)scheduleContentClamp
289
264
  {
290
265
  if (!_needsContentClamp) return;
291
- [self offsetDiag:@"clamp-scheduled"];
292
266
  NSUInteger generation = _generation;
293
267
  __weak __typeof__(self) weakSelf = self;
294
268
  dispatch_async(dispatch_get_main_queue(), ^{
@@ -300,19 +274,13 @@ static Event RNCScrollerMetrics(UIScrollView *scroll, CGPoint velocity, CGPoint
300
274
 
301
275
  - (void)clampContentOffsetIfNeeded
302
276
  {
303
- [self offsetDiag:@"clamp-enter-or-deferred"];
304
277
  if (!_needsContentClamp || _scrollView.dragging || _scrollView.decelerating ||
305
278
  _refreshControl.refreshing || _scrollView.bounds.size.height <= 0) return;
306
279
  _needsContentClamp = NO;
307
280
  CGFloat maximum = MAX(-_scrollView.adjustedContentInset.top,
308
281
  _scrollView.contentSize.height - _scrollView.bounds.size.height + _scrollView.adjustedContentInset.bottom);
309
- #if DEBUG
310
- [self offsetDiag:[NSString stringWithFormat:@"clamp-candidate-max=%.4f", maximum]];
311
- #endif
312
282
  if (_scrollView.contentOffset.y > maximum) {
313
- [self offsetDiag:@"clamp-applied-before"];
314
283
  [_scrollView setContentOffset:CGPointMake(_scrollView.contentOffset.x, maximum) animated:NO];
315
- [self offsetDiag:@"clamp-applied-after"];
316
284
  }
317
285
  }
318
286
 
@@ -351,7 +319,6 @@ static Event RNCScrollerMetrics(UIScrollView *scroll, CGPoint velocity, CGPoint
351
319
  - (void)stopScrolling
352
320
  {
353
321
  if (_stopping) return;
354
- [self offsetDiag:@"stop-before"];
355
322
  _stopping = YES;
356
323
  [_scrollView setContentOffset:_scrollView.contentOffset animated:NO];
357
324
  if (_dragActive) {
@@ -363,7 +330,6 @@ static Event RNCScrollerMetrics(UIScrollView *scroll, CGPoint velocity, CGPoint
363
330
  }
364
331
  [self finishMomentum];
365
332
  _stopping = NO;
366
- [self offsetDiag:@"stop-after"];
367
333
  }
368
334
 
369
335
  - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
@@ -428,14 +394,6 @@ static Event RNCScrollerMetrics(UIScrollView *scroll, CGPoint velocity, CGPoint
428
394
  - (void)scrollTo:(double)x y:(double)y animated:(BOOL)animated
429
395
  {
430
396
  if (_recycled || !isfinite(x) || !isfinite(y)) return;
431
- for (UIView *owner = self.superview; owner != nil; owner = owner.superview) {
432
- if ([owner conformsToProtocol:@protocol(RNCNativeScrollerInsetCoordinator)]) {
433
- [(id<RNCNativeScrollerInsetCoordinator>)owner nativeScrollerWillReceiveScrollCommand:self];
434
- }
435
- }
436
- #if DEBUG
437
- [self offsetDiag:[NSString stringWithFormat:@"command-scrollTo-enter-x=%.4f-y=%.4f-animated=%d", x, y, animated]];
438
- #endif
439
397
  [self stopScrolling];
440
398
  UIEdgeInsets inset = _scrollView.adjustedContentInset;
441
399
  CGPoint target = CGPointMake(MAX(-inset.left, MIN(x,
@@ -6,25 +6,11 @@
6
6
  using namespace facebook::react;
7
7
 
8
8
  @interface RNCCollapsiblePagerViewComponentView (FirstFrameTesting)
9
- - (void)mountingTransactionWillMount:(const MountingTransaction &)transaction
10
- withSurfaceTelemetry:(const SurfaceTelemetry &)telemetry;
11
9
  - (void)mountingTransactionDidMount:(const MountingTransaction &)transaction
12
10
  withSurfaceTelemetry:(const SurfaceTelemetry &)telemetry;
13
11
  - (UIScrollView *)findExplicitNativeScrollerInView:(UIView *)view;
14
12
  - (UIScrollView *)findVerticalScrollViewInView:(UIView *)view;
15
13
  - (void)attachScrollObserverForCurrentPage;
16
- - (void)attachScrollObserverForCurrentPageAfterTransition:(BOOL)selectionSettled;
17
- - (void)detachScrollObserver;
18
- - (void)beginPageStateTransition;
19
- - (void)updatePageStateTransitionProgress:(CGFloat)progress;
20
- - (void)finishPageStateTransition;
21
- - (void)preparePageForHorizontalTransitionAtIndex:(NSInteger)index;
22
- - (void)applyInsetsToScrollView:(UIScrollView *)scrollView pageIndex:(NSInteger)index restore:(BOOL)restore;
23
- @end
24
-
25
- @interface RNCNativeScrollerComponentView (ScrollCommandTesting)
26
- - (void)scrollTo:(double)x y:(double)y animated:(BOOL)animated;
27
- - (void)scrollToEnd:(BOOL)animated;
28
14
  @end
29
15
 
30
16
  @interface RNCCollapsiblePagerFirstFrameTests : XCTestCase
@@ -32,249 +18,6 @@ using namespace facebook::react;
32
18
 
33
19
  @implementation RNCCollapsiblePagerFirstFrameTests
34
20
 
35
- - (void)testReachableTopCommandBeforeLayoutMustNotReplayPendingPagePosition
36
- {
37
- for (NSNumber *command in @[@0, @1, @2]) {
38
- RNCCollapsiblePagerViewComponentView *pager = [self pagerWithPageCount:1];
39
- RNCNativeScrollerComponentView *scroller = [self addScrollerToPager:pager atIndex:0];
40
- NSMutableDictionary *offsets = [pager valueForKey:@"pageOffsets"];
41
- offsets[@"page-0"] = @660;
42
- scroller.scrollView.contentSize = CGSizeMake(0, 0);
43
- [pager attachScrollObserverForCurrentPage];
44
- XCTAssertTrue([[pager valueForKey:@"pendingPageRestoreKeys"] containsObject:@"page-0"]);
45
- XCTAssertEqualObjects(offsets[@"page-0"], @660);
46
- XCTAssertEqual([pager valueForKey:@"observedScrollView"], scroller.scrollView);
47
- XCTAssertEqualObjects([pager valueForKey:@"observedPageKey"], @"page-0");
48
- XCTAssertEqualObjects([pager valueForKey:@"currentIndex"], @0);
49
- if (command.boolValue) {
50
- if (command.integerValue == 2) {
51
- CGFloat reachableEndQ = MAX(-scroller.scrollView.adjustedContentInset.top,
52
- scroller.scrollView.contentSize.height - scroller.scrollView.bounds.size.height +
53
- scroller.scrollView.adjustedContentInset.bottom) + scroller.scrollView.contentInset.top;
54
- XCTAssertEqualWithAccuracy(reachableEndQ, 120, 0.01);
55
- XCTAssertEqualWithAccuracy(scroller.scrollView.contentOffset.y + scroller.scrollView.contentInset.top, reachableEndQ, 0.01);
56
- [scroller scrollToEnd:NO];
57
- }
58
- else [scroller scrollTo:0 y:-scroller.scrollView.adjustedContentInset.top animated:NO];
59
- XCTAssertEqualWithAccuracy(scroller.scrollView.contentOffset.y + scroller.scrollView.contentInset.top, command.integerValue == 2 ? 120 : 0, 0.01);
60
- XCTAssertFalse([[pager valueForKey:@"pendingPageRestoreKeys"] containsObject:@"page-0"]);
61
- XCTAssertEqualWithAccuracy([offsets[@"page-0"] doubleValue], command.integerValue == 2 ? 120 : 0, 0.01);
62
- XCTAssertEqual([pager valueForKey:@"observedScrollView"], scroller.scrollView);
63
- XCTAssertEqualObjects([pager valueForKey:@"observedPageKey"], @"page-0");
64
- }
65
- // The existing observed content-size path retries the pending restoration.
66
- scroller.scrollView.contentSize = CGSizeMake(320, 1500);
67
- XCTAssertFalse([[pager valueForKey:@"pendingPageRestoreKeys"] containsObject:@"page-0"]);
68
- CGFloat expected = command.integerValue == 2 ? 120 : (command.boolValue ? 0 : 660);
69
- XCTAssertEqualWithAccuracy(scroller.scrollView.contentOffset.y + scroller.scrollView.contentInset.top,
70
- expected, 0.01, @"command=%@ must not replay a cancelled reading position", command);
71
- XCTAssertEqualWithAccuracy([[pager valueForKey:@"headerOffset"] doubleValue], command.integerValue == 1 ? 0 : 120, 0.01);
72
- }
73
- }
74
-
75
- - (void)testScrollCommandCancellationRespectsOwnerAndValidity
76
- {
77
- for (NSNumber *mode in @[@0, @1, @2]) {
78
- RNCCollapsiblePagerViewComponentView *pager = [self pagerWithPageCount:2];
79
- RNCNativeScrollerComponentView *current = [self addScrollerToPager:pager atIndex:0];
80
- RNCNativeScrollerComponentView *other = [self addScrollerToPager:pager atIndex:1];
81
- NSMutableDictionary *offsets = [pager valueForKey:@"pageOffsets"];
82
- offsets[@"page-0"] = @660;
83
- offsets[@"page-1"] = @360;
84
- current.scrollView.contentSize = CGSizeMake(0, 0);
85
- [pager attachScrollObserverForCurrentPage];
86
- XCTAssertTrue([[pager valueForKey:@"pendingPageRestoreKeys"] containsObject:@"page-0"]);
87
- if (mode.integerValue == 0) {
88
- [current scrollTo:0 y:NAN animated:NO];
89
- } else if (mode.integerValue == 1) {
90
- [other scrollTo:0 y:-other.scrollView.adjustedContentInset.top animated:NO];
91
- } else {
92
- NSUInteger generation = [[pager valueForKey:@"generation"] unsignedIntegerValue];
93
- [pager setValue:@(generation + 1) forKey:@"observedPageGeneration"];
94
- [current scrollTo:0 y:-current.scrollView.adjustedContentInset.top animated:NO];
95
- }
96
- XCTAssertTrue([[pager valueForKey:@"pendingPageRestoreKeys"] containsObject:@"page-0"]);
97
- XCTAssertEqualObjects(offsets[@"page-0"], @660);
98
- XCTAssertEqualObjects(offsets[@"page-1"], @360);
99
- }
100
- RNCCollapsiblePagerViewComponentView *pager = [self pagerWithPageCount:2];
101
- RNCNativeScrollerComponentView *current = [self addScrollerToPager:pager atIndex:0];
102
- [self addScrollerToPager:pager atIndex:1];
103
- NSMutableDictionary *offsets = [pager valueForKey:@"pageOffsets"];
104
- offsets[@"page-0"] = @0;
105
- offsets[@"page-1"] = @360;
106
- [pager attachScrollObserverForCurrentPage];
107
- XCTAssertFalse([[pager valueForKey:@"pendingPageRestoreKeys"] containsObject:@"page-0"]);
108
- [current scrollTo:0 y:200 - current.scrollView.contentInset.top animated:NO];
109
- XCTAssertEqualWithAccuracy(current.scrollView.contentOffset.y + current.scrollView.contentInset.top, 200, 0.01);
110
- XCTAssertEqualWithAccuracy([offsets[@"page-0"] doubleValue], 200, 0.01);
111
- XCTAssertEqualObjects(offsets[@"page-1"], @360);
112
- }
113
-
114
- - (void)testTransitionLayoutCannotSaveSourceOffsetIntoDestinationCache
115
- {
116
- RNCCollapsiblePagerViewComponentView *pager = [self pagerWithPageCount:2];
117
- RNCNativeScrollerComponentView *source = [self addScrollerToPager:pager atIndex:0];
118
- RNCNativeScrollerComponentView *target = [self addScrollerToPager:pager atIndex:1];
119
- NSMutableDictionary *offsets = [pager valueForKey:@"pageOffsets"];
120
- offsets[@"page-0"] = @120;
121
- offsets[@"page-1"] = @660;
122
- [pager setValue:@120 forKey:@"headerOffset"];
123
- [pager attachScrollObserverForCurrentPage];
124
- XCTAssertEqualWithAccuracy(source.scrollView.contentOffset.y + source.scrollView.contentInset.top, 120, 0.01);
125
- XCTAssertEqualObjects([pager valueForKey:@"headerOffset"], @120);
126
- XCTAssertEqualObjects(offsets[@"page-1"], @660);
127
- [pager detachScrollObserver];
128
- [pager setValue:@YES forKey:@"transitioning"];
129
- // A layout pass runs between programmatic transition start and completion.
130
- [pager attachScrollObserverForCurrentPage];
131
- [pager setValue:@1 forKey:@"currentIndex"];
132
- [pager attachScrollObserverForCurrentPageAfterTransition:YES];
133
- XCTAssertEqualWithAccuracy([offsets[@"page-1"] doubleValue], 660, 0.01);
134
- XCTAssertEqualWithAccuracy(target.scrollView.contentOffset.y + target.scrollView.contentInset.top, 660, 0.01);
135
- XCTAssertNotEqual([pager valueForKey:@"observedScrollView"], source.scrollView);
136
- }
137
-
138
- - (void)testSmoothTransitionRestoresWholePagePositionsAndCancellation
139
- {
140
- for (NSNumber *targetQ in @[@0, @60, @660]) {
141
- RNCCollapsiblePagerViewComponentView *pager = [self pagerWithPageCount:2];
142
- RNCNativeScrollerComponentView *source = [self addScrollerToPager:pager atIndex:0];
143
- RNCNativeScrollerComponentView *target = [self addScrollerToPager:pager atIndex:1];
144
- NSMutableDictionary *offsets = [pager valueForKey:@"pageOffsets"];
145
- offsets[@"page-0"] = @0;
146
- offsets[@"page-1"] = targetQ;
147
- [pager attachScrollObserverForCurrentPage];
148
- [pager beginPageStateTransition];
149
- [pager setValue:@YES forKey:@"isPagerDragging"];
150
- [pager setValue:@YES forKey:@"transitioning"];
151
- [pager updatePageStateTransitionProgress:0.5];
152
- CGFloat displayH = MIN(targetQ.doubleValue, 120) / 2;
153
- XCTAssertEqualWithAccuracy([[pager valueForKey:@"headerOffset"] doubleValue], displayH, 0.01);
154
- XCTAssertEqualWithAccuracy(source.scrollView.contentOffset.y + source.scrollView.contentInset.top, displayH, 0.01);
155
- XCTAssertEqualWithAccuracy(target.scrollView.contentOffset.y + target.scrollView.contentInset.top,
156
- MAX(targetQ.doubleValue - 120, 0) + displayH, 0.01);
157
- XCTAssertEqualObjects(offsets[@"page-0"], @0);
158
- XCTAssertEqualObjects(offsets[@"page-1"], targetQ);
159
- // Cancelling the swipe restores both pages, not just the selected source.
160
- [pager finishPageStateTransition];
161
- XCTAssertEqualWithAccuracy(source.scrollView.contentOffset.y + source.scrollView.contentInset.top, 0, 0.01);
162
- XCTAssertEqualWithAccuracy(target.scrollView.contentOffset.y + target.scrollView.contentInset.top, targetQ.doubleValue, 0.01);
163
- XCTAssertEqualObjects(offsets[@"page-1"], targetQ);
164
- [pager setValue:@NO forKey:@"isPagerDragging"];
165
- [pager setValue:@NO forKey:@"transitioning"];
166
- [pager attachScrollObserverForCurrentPage];
167
- [pager beginPageStateTransition];
168
- [pager setValue:@1 forKey:@"destinationIndex"];
169
- [pager preparePageForHorizontalTransitionAtIndex:1];
170
- [pager updatePageStateTransitionProgress:1];
171
- XCTAssertEqualWithAccuracy(source.scrollView.contentOffset.y + source.scrollView.contentInset.top,
172
- MIN(targetQ.doubleValue, 120), 0.01);
173
- [pager setValue:@1 forKey:@"currentIndex"];
174
- [pager attachScrollObserverForCurrentPageAfterTransition:YES];
175
- XCTAssertEqualWithAccuracy(target.scrollView.contentOffset.y + target.scrollView.contentInset.top, targetQ.doubleValue, 0.01);
176
- XCTAssertEqualWithAccuracy([[pager valueForKey:@"headerOffset"] doubleValue], MIN(targetQ.doubleValue, 120), 0.01);
177
- }
178
- }
179
-
180
- - (void)testNonAdjacentTransitionUsesFixedEndpointsAndRestoresIntermediatePage
181
- {
182
- RNCCollapsiblePagerViewComponentView *pager = [self pagerWithPageCount:4];
183
- for (NSInteger index = 0; index < 4; index++) [self addScrollerToPager:pager atIndex:index];
184
- NSMutableDictionary *offsets = [pager valueForKey:@"pageOffsets"];
185
- offsets[@"page-0"] = @0;
186
- offsets[@"page-1"] = @60;
187
- offsets[@"page-2"] = @360;
188
- offsets[@"page-3"] = @660;
189
- [pager attachScrollObserverForCurrentPage];
190
- [pager beginPageStateTransition];
191
- [pager setValue:@3 forKey:@"destinationIndex"];
192
- [pager preparePageForHorizontalTransitionAtIndex:3];
193
- [pager updatePageStateTransitionProgress:1];
194
- XCTAssertEqualWithAccuracy([[pager valueForKey:@"headerOffset"] doubleValue], 40, 0.01);
195
- [pager setValue:@3 forKey:@"currentIndex"];
196
- [pager attachScrollObserverForCurrentPageAfterTransition:YES];
197
- XCTAssertEqualObjects(offsets[@"page-1"], @60);
198
- XCTAssertEqualObjects(offsets[@"page-2"], @360);
199
- XCTAssertEqualObjects(offsets[@"page-3"], @660);
200
- for (NSInteger index = 1; index < 4; index++) {
201
- UIViewController *page = [pager valueForKey:@"pageControllers"][index];
202
- RNCNativeScrollerComponentView *scroller = page.view.subviews.firstObject;
203
- NSString *key = [NSString stringWithFormat:@"page-%ld", (long)index];
204
- XCTAssertEqualWithAccuracy(scroller.scrollView.contentOffset.y + scroller.scrollView.contentInset.top,
205
- [offsets[key] doubleValue], 0.01);
206
- }
207
- }
208
-
209
- - (void)testZeroLayoutPreservesPendingWholePageRestore
210
- {
211
- RNCCollapsiblePagerViewComponentView *pager = [self pagerWithPageCount:1];
212
- RNCNativeScrollerComponentView *scroller = [self addScrollerToPager:pager atIndex:0];
213
- NSMutableDictionary *offsets = [pager valueForKey:@"pageOffsets"];
214
- offsets[@"page-0"] = @660;
215
- scroller.scrollView.contentSize = CGSizeMake(0, 0);
216
- [pager attachScrollObserverForCurrentPage];
217
- XCTAssertEqualObjects(offsets[@"page-0"], @660);
218
- XCTAssertTrue([[pager valueForKey:@"pendingPageRestoreKeys"] containsObject:@"page-0"]);
219
- // Releasing an observed but unmeasured identity must retain its pending Q.
220
- scroller.tag = 91001;
221
- ShadowView removedView;
222
- removedView.tag = (Tag)scroller.tag;
223
- MountingTransaction removal(1, 1, {ShadowViewMutation::RemoveMutation(1, removedView, 0)}, {});
224
- SurfaceTelemetry telemetry;
225
- [pager mountingTransactionWillMount:removal withSurfaceTelemetry:telemetry];
226
- XCTAssertEqualObjects(offsets[@"page-0"], @660);
227
- [self finishMount:pager];
228
- XCTAssertEqualObjects(offsets[@"page-0"], @660);
229
- scroller.scrollView.contentSize = CGSizeMake(320, 1500);
230
- XCTAssertEqualObjects(offsets[@"page-0"], @660);
231
- XCTAssertFalse([[pager valueForKey:@"pendingPageRestoreKeys"] containsObject:@"page-0"]);
232
- XCTAssertEqualWithAccuracy(scroller.scrollView.contentOffset.y + scroller.scrollView.contentInset.top, 660, 0.01);
233
- }
234
-
235
- - (void)testUnresolvedReplacementDoesNotCommitTemporaryClamp
236
- {
237
- RNCCollapsiblePagerViewComponentView *pager = [self pagerWithPageCount:2];
238
- RNCNativeScrollerComponentView *source = [self addScrollerToPager:pager atIndex:0];
239
- NSMutableDictionary *offsets = [pager valueForKey:@"pageOffsets"];
240
- offsets[@"page-0"] = @0;
241
- offsets[@"page-1"] = @660;
242
- [pager attachScrollObserverForCurrentPage];
243
- [pager beginPageStateTransition];
244
- [pager setValue:@1 forKey:@"destinationIndex"];
245
- UICollectionView *replacement = [[UICollectionView alloc]
246
- initWithFrame:CGRectMake(0, 0, 320, 600)
247
- collectionViewLayout:[UICollectionViewFlowLayout new]];
248
- UIViewController *page = [pager valueForKey:@"pageControllers"][1];
249
- [page.view addSubview:replacement];
250
- id released = [NSClassFromString(@"RNCCollapsiblePagerReleasedScrollState") new];
251
- XCTAssertNotNil(released);
252
- [released setValue:source.scrollView forKey:@"scrollView"];
253
- [released setValue:source forKey:@"componentView"];
254
- [released setValue:@(source.tag) forKey:@"componentTag"];
255
- [pager valueForKey:@"releasedPageScrollStates"][@"page-1"] = released;
256
- [pager preparePageForHorizontalTransitionAtIndex:1];
257
- [pager setValue:@1 forKey:@"currentIndex"];
258
- [pager finishPageStateTransition];
259
- XCTAssertEqualObjects(offsets[@"page-1"], @660);
260
- XCTAssertTrue([[pager valueForKey:@"pendingPageRestoreKeys"] containsObject:@"page-1"]);
261
- }
262
-
263
- - (void)testRenamedPageDoesNotResurrectPrunedObserverCache
264
- {
265
- RNCCollapsiblePagerViewComponentView *pager = [self pagerWithPageCount:1];
266
- RNCNativeScrollerComponentView *scroller = [self addScrollerToPager:pager atIndex:0];
267
- NSMutableDictionary *offsets = [pager valueForKey:@"pageOffsets"];
268
- offsets[@"page-0"] = @60;
269
- [pager attachScrollObserverForCurrentPage];
270
- [pager setValue:@[@"replacement-key"] forKey:@"pageKeys"];
271
- [offsets removeObjectForKey:@"page-0"];
272
- scroller.scrollView.contentOffset = CGPointMake(0, 200);
273
- [pager detachScrollObserver];
274
- XCTAssertNil(offsets[@"page-0"]);
275
- XCTAssertNil(offsets[@"replacement-key"]);
276
- }
277
-
278
21
  - (RNCCollapsiblePagerViewComponentView *)pagerWithPageCount:(NSInteger)count
279
22
  {
280
23
  RNCCollapsiblePagerViewComponentView *pager =
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onekeyfe/react-native-pager-view",
3
- "version": "3.0.172",
3
+ "version": "3.0.173",
4
4
  "description": "React Native wrapper for Android and iOS ViewPager",
5
5
  "source": "./src/index.tsx",
6
6
  "main": "./lib/module/index.js",
@@ -72,7 +72,7 @@
72
72
  "typescript": "^5.9.2"
73
73
  },
74
74
  "peerDependencies": {
75
- "@onekeyfe/react-native-native-logger": "3.0.172",
75
+ "@onekeyfe/react-native-native-logger": "3.0.173",
76
76
  "react": "*",
77
77
  "react-native": "*"
78
78
  },