software-mansion / software-mansion/react-native-screens
[tvOS] Menu button pops a native stack screen before the app can handle it, with no way to opt out
@kacperzolkiewski is already working on this.
Since Sep 10, 2026.
- Dominant language
- TypeScript
- Stars
- 3.7k
- Forks
- 714
- Avg merge
- 2d 23h
- Merged PRs (30d)
- 71
Description
Description
On tvOS, pressing Menu on a screen pushed onto a native stack pops that screen. The app has no way to opt out of it, and the press never reaches JS - neither BackHandler nor useTVEventHandler sees it, even after calling TVEventControl.enableTVMenuKey(). This makes the usual TV pattern impossible, where back first does something inside the screen: move focus to a toolbar, close an overlay, cancel an edit mode.
The pop is UIKit's built-in tvOS UINavigationController behavior, inherited by RNSNavigationController. The same code works at stack depth 1, and works on Android TV, so it only shows up once a screen is pushed on tvOS.
Anything that lets the app opt out of the automatic pop would be enough - for example a prop on the stack or a screen that stops RNSNavigationController from popping on a Menu press.
Steps to reproduce
- In a react-native-tvos app, set up a native stack with two screens.
- On both screens, call
TVEventControl.enableTVMenuKey()and add ahardwareBackPresslistener that returnstrue. - Run on a tvOS Simulator or an Apple TV.
- On the first screen, press Menu. The listener runs and nothing is dismissed - as expected.
- Push the second screen and press Menu again.
Expected: the second screen behaves like the first - it stays, and the listener runs.
Actual: UIKit pops the screen, and the listener never runs.
Snack or a link to a repository
https://github.com/maksym-kershengolts-zattoo/tvos-menu-key-native-stack-repro
Screens version
4.25.2
React Native version
0.86.0-2
Platforms
tvOS
JavaScript runtime
None
Workflow
None
Build type
None
Device
None
Device model
No response
Acknowledgements
Yes
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.