React Native Screens 4.30.0

v4.​30.​0Minor Release

Key changes

This release focuses on iOS 27 and iPhone Duo support in Stack v4. On iOS 26 and newer, screens are now laid out under an opaque navigation bar and inset through the safe area instead of UIKit's extended-layout frame, and useHeaderHeight reports the visible height of the bar while it is minimized. The new unstable_safeAreaEdges prop on ScreenStackItem lets a screen override the insets applied on iOS 26+, and opaque headers no longer minimize on scroll. Tabs.Host gains prominentScreenKey (iOS 27+), backed by UIKit's prominentTabIdentifier, so a chosen tab stays visible when the tab bar minimizes.

Opaque headers in the native stack on iOS 26+

Starting with iOS 26, Apple recommends against custom navigation bar backgrounds. Bars are transparent by default and content is meant to extend under them (see WWDC25: Build a UIKit app with the new design). Opaque headers (headerTransparent: false) are not deprecated, but UIKit's support for them keeps getting worse:

  • On iOS 26, edgesForExtendedLayout, which we used to lay out the screen below an opaque header, does not position the screen correctly in landscape and in modals. We partially worked around this with a SafeAreaView in #3231.
  • On iPhone Duo (iOS 27) the same problem affects regular screens in portrait, so the screen ended up partially under the header. Changes to the internal hierarchy of the header also introduced new bugs around Pressable.
  • An opaque header's background does not reach the top of the screen and leaves a strip above it. When this was reported on the Apple Developer Forums, Apple did not treat it as a bug and pointed to the guidance against custom bar backgrounds instead.

We recommend following Apple's guidance and using a transparent header on iOS 26+.

Improvements

  • iOS (Tabs): added prominentScreenKey on Tabs.Host so a chosen tab stays visible when the tab bar minimizes on iOS 27+ in #4724.
  • iOS (Stack v4): added the unstable_safeAreaEdges prop on ScreenStackItem to override the safe-area edges applied on iOS 26+ in #4872.
  • iOS (Stack v4): opaque headers no longer minimize on scroll in #4873.

Bug fixes

  • Fixed broken types being published for Tabs.Host and Tabs.Screen in #4871.
  • iOS (Stack v4): screens are laid out under an opaque navigation bar on iOS 26+, and the shadow tree is offset by the native screen origin, in #4757 and #4725.
  • iOS (Stack v4): header subview positions are updated after the navigation bar lays out on iOS 26+ in #4758.
  • iOS (Stack v4): useHeaderHeight reports the minimized header height on iOS 27+ in #4734.
  • iOS (Tabs): user selection of a search tab is no longer dropped by mount transactions in #4862.
  • iOS (Tabs): async-loaded icons are applied to tabs that overflow into More, and programmatic selection while More is active no longer sends a duplicate onTabSelected, in #4889 and #4890.
  • Android: legacy and tabs containers no longer delay the pressed state of child views, so native buttons show touch feedback immediately in #4771.

This version supports React Native 0.84 and above.

See the full release notes for 4.30.0 on GitHub and the full changelog in 4.29.0...4.30.0.

Release card
React Native Screens 4.30.0 release card