Skip to content

Commit

Permalink
fix(ios): resolve occasional index OOB when no items in ViewPager (#4208
Browse files Browse the repository at this point in the history
)
  • Loading branch information
wwwcg authored Mar 5, 2025
1 parent 26f645d commit aa45fc9
Showing 1 changed file with 16 additions and 15 deletions.
31 changes: 16 additions & 15 deletions renderer/native/ios/renderer/component/viewPager/HippyViewPager.mm
Original file line number Diff line number Diff line change
Expand Up @@ -430,23 +430,24 @@ - (void)invokePageSelected:(NSUInteger)index {

- (NSUInteger)targetPageIndexFromTargetContentOffsetX:(CGFloat)targetContentOffsetX {
NSInteger thePage = -1;
if (fabs(targetContentOffsetX) < FLT_EPSILON) {
thePage = 0;
} else {
for (int i = 0; i < self.viewPagerItems.count; i++) {
UIView *pageItem = self.viewPagerItems[i];
CGPoint point = [self middlePointOfView:pageItem];
if (point.x > targetContentOffsetX) {
thePage = i;
break;
}
}
NSUInteger count = self.viewPagerItems.count;
if (count == 0) {
return 0;
}
if (thePage == -1) {
thePage = 0;
} else if (thePage >= self.viewPagerItems.count) {
thePage = self.viewPagerItems.count - 1;

for (int i = 0; i < count; i++) {
UIView *pageItem = self.viewPagerItems[i];
CGPoint point = [self middlePointOfView:pageItem];
if (point.x > targetContentOffsetX) {
thePage = i;
break;
}
}

// Make sure the index is within legal limits
thePage = MIN(MAX(thePage, 0), count - 1);

// Update cache and return result
if (_lastPageIndex != thePage) {
_lastPageIndex = thePage;
_lastSelectedPageItem = self.viewPagerItems[thePage];
Expand Down

0 comments on commit aa45fc9

Please sign in to comment.