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

Open
#4,618 0 comments 0 reactions 1 assignee View on GitHub

@kacperzolkiewski is already working on this.

Since Sep 10, 2026.

cr:platform:tvos cr:repro-provided platform:tvos repro-provided
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
  1. In a react-native-tvos app, set up a native stack with two screens.
  2. On both screens, call TVEventControl.enableTVMenuKey() and add a hardwareBackPress listener that returns true.
  3. Run on a tvOS Simulator or an Apple TV.
  4. On the first screen, press Menu. The listener runs and nothing is dismissed - as expected.
  5. 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

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.