Skip to content

fix(android): let nested horizontal ScrollView scroll inside pager - #1182

Merged
troZee merged 1 commit into
mainfrom
fix/nested-scroll
Oct 15, 2026
Merged

troZee merged 1 commit into
mainfrom
fix/nested-scroll

Conversation

@krozniata

@krozniata krozniata commented Oct 14, 2026 •

Copy link
Copy Markdown
Member

Summary

Fixes #1156

On Android, a horizontal ScrollView inside a page couldn't be scrolled. The pager always got the swipe first

Now, when you start swiping, the pager checks if something under your finger can scroll that way. If it can, it gets the swipe. If not, the pager moves as usual.

Nested pagers work the same way

Test Plan

Added a repro screen to the example app and an e2e test for it

All e2e should pass as expected

What's required for testing (prerequisites)?

What are the steps to reproduce (after prerequisites)?

Compatibility

OS Implemented
iOS N/A
Android ✅❌

Copilot AI lite review requested due to automatic review settings October 14, 2026 15:00
@github-actions

Copy link
Copy Markdown

🟢 e2e: 17 passed

All 17 tests in 11 files
Test Time
🟢 tests/basic-pager.e2e.ts · 3 passed 1m 39s
🟢 basic pager › in LTR › pages horizontally 33.6s
🟢 basic pager › in LTR › pages vertically 23.1s
🟢 basic pager › in RTL › pages horizontally with the reversed gesture 42.2s
🟢 tests/issues/issue-1083-modal-set-page.e2e.ts · 1 passed 15.1s
🟢 setPage called behind a native-stack modal lands on the requested page 15.1s
🟢 tests/issues/issue-1098-nested-pager.e2e.ts · 1 passed 13.5s
🟢 outer pager stays responsive after its page count changes around a nested pager 13.5s
🟢 tests/issues/issue-1154-page-change-focus.e2e.ts · 3 passed 43.3s
🟢 leaving a page with setPage blurs its input 13.2s
🟢 leaving a page with a swipe blurs its input 10.6s
🟢 an input focused on the new page keeps focus 19.5s
🟢 tests/issues/issue-1156-nested-horizontal-scroll.e2e.ts · 3 passed 28.6s
🟢 a horizontal ScrollView in a page scrolls instead of the pager 9.4s
🟢 the pager takes the swipe once the ScrollView is at its edge 10.2s
🟢 a swipe outside the ScrollView changes the page 9.0s
🟢 tests/material-top-bar.e2e.ts · 1 passed 11.1s
🟢 material top tabs survive a native-stack push and pop 11.1s
🟢 tests/nested-pager-view.e2e.ts · 1 passed 10.6s
🟢 nested horizontal and vertical pagers scroll independently 10.6s
🟢 tests/on-page-selected.e2e.ts · 1 passed 12.9s
🟢 onPageSelected fires an alert for every page change 12.9s
🟢 tests/scrollable-pager-view.e2e.ts · 1 passed 16.3s
🟢 pager inside a ScrollView keeps its page across vertical scrolls 16.3s
🟢 tests/smoke.e2e.ts · 1 passed 8.5s
🟢 horizontal pager pages with the panel buttons 8.5s
🟢 tests/tab-view-inside-scroll-view.e2e.ts · 1 passed 13.9s
🟢 TabView inside a ScrollView swipes tabs and scrolls the page 13.9s

e2e 0.18.0 · 4m 34s · android · run artifacts

@github-actions

github-actions Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

🟢 e2e: 13 passed

All 13 tests in 11 files
Test Time
🟢 tests/basic-pager.e2e.ts · 3 passed 2m 58s
🟢 basic pager › in LTR › pages horizontally 1m 15s
🟢 basic pager › in LTR › pages vertically 40.0s
🟢 basic pager › in RTL › pages horizontally with the reversed gesture 1m 3s
🟢 tests/issues/issue-1083-modal-set-page.e2e.ts · 1 passed 20.7s
🟢 setPage called behind a native-stack modal lands on the requested page 20.7s
🟢 tests/issues/issue-1096-keyboard-shrink.e2e.ts · 1 passed 32.1s
🟢 keyboard avoidance does not shrink the page under the keyboard 32.1s
🟢 tests/issues/issue-1098-nested-pager.e2e.ts · 1 passed 27.0s
🟢 outer pager stays responsive after its page count changes around a nested pager 27.0s
🟢 tests/issues/issue-1142-search-bar-inset.e2e.ts · 1 passed 27.5s
🟢 FlatList inside the pager gets the search bar safe-area insets 27.5s
🟢 tests/material-top-bar.e2e.ts · 1 passed 45.1s
🟢 material top tabs survive a native-stack push and pop 45.1s
🟢 tests/nested-pager-view.e2e.ts · 1 passed 26.8s
🟢 nested horizontal and vertical pagers scroll independently 26.8s
🟢 tests/on-page-selected.e2e.ts · 1 passed 23.7s
🟢 onPageSelected fires an alert for every page change 23.7s
🟢 tests/scrollable-pager-view.e2e.ts · 1 passed 35.3s
🟢 pager inside a ScrollView keeps its page across vertical scrolls 35.3s
🟢 tests/smoke.e2e.ts · 1 passed 15.3s
🟢 horizontal pager pages with the panel buttons 15.3s
🟢 tests/tab-view-inside-scroll-view.e2e.ts · 1 passed 24.1s
🟢 TabView inside a ScrollView swipes tabs and scrolls the page 24.1s

e2e 0.18.0 · 7m 47s · ios · run artifacts

@krozniata
krozniata marked this pull request as ready for review October 15, 2026 06:52
@krozniata
krozniata requested a review from troZee October 15, 2026 07:12
@troZee
troZee merged commit 3e9fa8e into main Oct 15, 2026
12 of 14 checks passed
@troZee
troZee deleted the fix/nested-scroll branch October 15, 2026 07:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Android] v9: nested horizontal ScrollView inside a page no longer scrolls (regression from 8.x)

2 participants