What's changed
This release migrates the Tabs implementation on iOS 26.1+ to the UITab API and extends the Tabs component with several new props: tabBarHiddenAnimationEnabled, tabBarSidebarPreferredPlacement, automaticallyActivatesSearch (backed by UISearchTab) and custom drawable/symbol tab-bar icons with per-slot coloring and per-tab sizing. 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, no crash during instance teardown) and corrections to form sheet scroll view handling on iOS.
✅ Improvements
- feat(iOS, Tabs): add
tabBarHiddenAnimationEnabledprop (#4627) - feat(iOS, Tabs): add tabBarSidebarPreferredPlacement prop to choose between sidebar and tab bar on iOS 27 (#4668)
- feat(iOS, Tabs): Migrate to UITab API for iOS >= 26.1 (#4675)
- feat(iOS, Tabs): Use
UISearchTabwithautomaticallyActivatesSearchprop (#4679) - feat(Tabs): custom drawable/symbol tab-bar icons — per-slot coloring, per-tab size, indicator sizing, iOS fallback (#4209)
- feat(iOS, Stack v4): Add
visibilityPriorityprop to header items (#4709)
🐞 Bugfixes
- fix(iOS): skip form sheet scroll view frame correction once the screen is invalidated (#4652)
- fix(iOS, Stack v4): stop form sheet from resizing a recycled scroll view (#4791)
- fix(iOS, Stack v4): send dismiss event to js when pop animation ends (#4714)
- fix(iOS, Tabs): prevent tab bar hidden animation on first render (#4673)
- fix(iOS, Tabs): enforce consistent bottom accessory width (#4792)
- fix(iOS, Tabs): Hide "Edit" button in sidebar for UITab API (#4804)
- fix(iOS, Tabs): Reorder tab image configuration calls (#4813)
- fix(Android): make fragment restoration R8-safe (#4540)
- fix(Android): don't crash in setupFabric during instance teardown (#4790)
- fix(Android): restore touch coordinates after covered screens rotate (#4760)
- fix(Android, Stack v4): don't run header update for a screen detached from its stack (#4498)
- fix(Android, Stack v4): remove orphaned fragments when ScreenContainer detaches (#4814)
- fix(Android, Tabs): let touches through the strip a hidden tab bar leaves behind (#4489)
Misc
- chore(iOS, FabricExample): use scene lifecycle by default (#4676)
- chore(iOS, TVOSExample): use scene lifecycle by default (#4710)
- chore(Android, Stack v4): remove dead ScreenModalFragment and helpers (#4795)
- chore(test): move
tabBarSidebarPreferredPlacementtest to component integration tests (#4816)