Description
Tapping the currently-active tab on NativeTabs (expo-router/unstable-native-tabs, backed by rn-screens TabsHost/RNSTabBarController) does not scroll the active screen's UIScrollView to the top.
disableScrollToTop is left at default (false) on the NativeTabs.Trigger, and the underlying scroll view has scrollsToTop = YES (the default for RN's <ScrollView>).
Expected: UIKit's standard "tap active tab to scroll to top" behavior fires (same as native iOS apps and direct UITabBarController usage).
Actual: nothing happens. The screen stays at the current scroll offset.
Inspected ios/tabs/host/*.mm — no scroll references, so the assumption is that the behavior is fully delegated to UIKit. The question is whether RNSTabBarController needs to explicitly opt into / forward this behavior (e.g. set scrollsToTop on the right descendant, or implement a UITabBarControllerDelegate scroll handler).
Steps to reproduce
- Use
<NativeTabs> from expo-router/unstable-native-tabs as the tab layout.
- Inside one tab, render a plain RN
<ScrollView> with enough content to scroll vertically.
- Run the app on iOS (device or simulator, iOS 26).
- Scroll the list down.
- Tap the currently active tab.
- Observe: scroll position does not reset to top.
Minimal code:
// app/(tabs)/_layout.tsx
import { NativeTabs } from 'expo-router/unstable-native-tabs';
export default () => (
<NativeTabs>
<NativeTabs.Trigger name="rates">
<NativeTabs.Trigger.Icon sf="dollarsign.circle" />
<NativeTabs.Trigger.Label>Rates</NativeTabs.Trigger.Label>
</NativeTabs.Trigger>
</NativeTabs>
);
// app/(tabs)/rates/index.tsx
import { ScrollView, View } from 'react-native';
export default () => (
<ScrollView contentInsetAdjustmentBehavior="automatic">
{Array.from({ length: 50 }).map((_, i) => (
<View key={i} style={{ height: 80, backgroundColor: i % 2 ? '#eee' : '#fff' }} />
))}
</ScrollView>
);
Snack or a link to a repository
Will provide a minimal repro repo if requested — the snippets above reproduce the behavior on any fresh Expo SDK 55 project with NativeTabs enabled. (Can attach a link in a follow-up comment.)
Screens version
4.24.0
React Native version
0.83.9
Platforms
iOS
JavaScript runtime
Hermes
Workflow
Expo bare workflow
Architecture
Fabric (New Architecture)
Build type
Debug mode
Device
Real device
Device model
iPhone (iOS 26)
Acknowledgements
Yes
Additional notes
- Used to work with classic JS-based
<Tabs> via useScrollToTop from @react-navigation/native. Migrating to NativeTabs as recommended for SDK 56 decoupling, where direct react-navigation usage is no longer allowed.
expo-router: 55.x (unstable-native-tabs).
Description
Tapping the currently-active tab on
NativeTabs(expo-router/unstable-native-tabs, backed by rn-screensTabsHost/RNSTabBarController) does not scroll the active screen'sUIScrollViewto the top.disableScrollToTopis left at default (false) on theNativeTabs.Trigger, and the underlying scroll view hasscrollsToTop = YES(the default for RN's<ScrollView>).Expected: UIKit's standard "tap active tab to scroll to top" behavior fires (same as native iOS apps and direct
UITabBarControllerusage).Actual: nothing happens. The screen stays at the current scroll offset.
Inspected
ios/tabs/host/*.mm— noscrollreferences, so the assumption is that the behavior is fully delegated to UIKit. The question is whetherRNSTabBarControllerneeds to explicitly opt into / forward this behavior (e.g. setscrollsToTopon the right descendant, or implement aUITabBarControllerDelegatescroll handler).Steps to reproduce
<NativeTabs>fromexpo-router/unstable-native-tabsas the tab layout.<ScrollView>with enough content to scroll vertically.Minimal code:
Snack or a link to a repository
Will provide a minimal repro repo if requested — the snippets above reproduce the behavior on any fresh Expo SDK 55 project with NativeTabs enabled. (Can attach a link in a follow-up comment.)
Screens version
4.24.0
React Native version
0.83.9
Platforms
iOS
JavaScript runtime
Hermes
Workflow
Expo bare workflow
Architecture
Fabric (New Architecture)
Build type
Debug mode
Device
Real device
Device model
iPhone (iOS 26)
Acknowledgements
Yes
Additional notes
<Tabs>viauseScrollToTopfrom@react-navigation/native. Migrating to NativeTabs as recommended for SDK 56 decoupling, where direct react-navigation usage is no longer allowed.expo-router: 55.x (unstable-native-tabs).