React Native Screens 4.29.0

v4.​29.​0Minor Release

Key changes

This release migrates the Tabs implementation on iOS 26.1 and newer to the UITab API (#4675) and extends the Tabs component with several new props: tabBarHiddenAnimationEnabled, tabBarSidebarPreferredPlacement, automaticallyActivatesSearch (backed by UISearchTab), and custom drawable or symbol tab bar icons with per-slot coloring and per-tab sizing (#4209). Header items in Stack v4 gain a visibilityPriority prop on iOS.

It also brings a number of fixes, most notably hardening of the Android fragment lifecycle (R8-safe restoration, orphaned fragment cleanup, and no crash during instance teardown) and corrections to form sheet scroll view handling on iOS.

Improvements

  • iOS (Tabs): add the tabBarHiddenAnimationEnabled prop by @ilcato in #4632 (resolves #4627)
  • iOS (Tabs): add the tabBarSidebarPreferredPlacement prop to choose between the sidebar and the tab bar on iOS 27 by @Loloekk in #4668
  • iOS (Tabs): migrate to the UITab API on iOS 26.1 and newer by @kmichalikk in #4675
  • iOS (Tabs): use UISearchTab with the automaticallyActivatesSearch prop by @kmichalikk in #4679
  • Tabs: custom drawable and symbol tab bar icons with per-slot coloring, per-tab size, indicator sizing, and an iOS fallback by @stachbial in #4209
  • iOS (Stack v4): add the visibilityPriority prop to header items by @Loloekk in #4709

Bug fixes

iOS

  • Form sheet: skip the scroll view frame correction once the screen is invalidated by @saddlepaddle in #4652
  • Stack v4: stop the form sheet from resizing a recycled scroll view by @kkafar in #4791
  • Stack v4: send the dismiss event to JS when the pop animation ends by @kacperzolkiewski in #4714
  • Tabs: prevent the tab bar hidden animation on first render by @kkafar in #4673
  • Tabs: enforce a consistent bottom accessory width by @kligarski in #4792
  • Tabs: hide the "Edit" button in the sidebar when using the UITab API by @kmichalikk in #4804
  • Tabs: reorder tab image configuration calls by @kmichalikk in #4813

Android

  • Make fragment restoration R8-safe by @ngocdevv in #4540
  • Don't crash in setupFabric during instance teardown by @kkafar in #4790
  • Restore touch coordinates after covered screens rotate by @savv in #4760
  • Stack v4: don't run the header update for a screen detached from its stack by @nsingh-ut in #4498
  • Stack v4: remove orphaned fragments when ScreenContainer detaches by @kkafar in #4814
  • Tabs: let touches through the strip a hidden tab bar leaves behind by @dyankov91 in #4489

Misc

  • iOS (FabricExample): use the scene lifecycle by default by @kligarski in #4676
  • iOS (TVOSExample): use the scene lifecycle by default by @kligarski in #4710
  • Android (Stack v4): remove the dead ScreenModalFragment and its helpers by @kkafar in #4795
  • Tests: move the tabBarSidebarPreferredPlacement test to the component integration tests by @Loloekk in #4816

Source: 4.29.0 release notes on GitHub. Full changelog: 4.28.0...4.29.0.

Release card
React Native Screens 4.29.0 release card