Key changes
The Tabs API is now marked stable (#4296). This release also raises the minimum supported React Native version to 0.84 (#4302).
- feat(Tabs): mark the Tabs API as stable by @kkafar in #4296
- feat(Tabs): cohesive cross-platform native API with an observer registry by @kkafar in #3966
- feat(Tabs): add the
programmatic-nativeactionOrigin variant by @kkafar in #3951 - feat(iOS, Tabs): add the
bottomAccessoryHiddenprop by @kligarski in #4291 - feat(iOS): enable synchronous shadow state updates by default for header config (#3932), header subviews (#3933), and screens (#3931) by @kmichalikk
- feat(Android, Stack v4): add
disable*InsetApplicationprops by @sgaczol in #4220
Bug fixes
FormSheet (Android)
- Prevent BottomSheetBehavior override when using FormSheets by @t0maboro in #3912
- Add a SheetAnimationCoordinator to synchronize animations from different sources by @t0maboro in #3914
- Prioritize keyboard animation over content resize animation by @t0maboro in #3924
- Dismiss the sheet only on
ACTION_UPto prevent double-back dismissals by @t0maboro in #4034 - Include keyboard
translationYin shadow updates by @jiroscripts in #4065 - Drive ScreenFooter keyboard insets from the sheet instead of the decor view by @stachbial in #4149
- v4: refine keyboard avoidance to prevent layout reflows with SafeAreaView by @t0maboro in #4244
- v4: prevent over-translation on keyboard appearance in nested containers by @t0maboro in #4240
Tabs
- iOS: fix the moreNavigationController navigation bar staying visible on navigation by @kkafar in #3993
- iOS: correctly pass action origin to
progressNavigationStateby @kkafar in #3994 - iOS: register the navigation state observer outside
RCTAssertby @kkafar in #4004 - iOS: weak-capture the tab bar item and screen view in async image callbacks by @cortinico in #4111
- iOS: remove the
invalidatecall indidMoveToWindowby @sgaczol in #4155 - iOS: prevent flickering tab bar height and contents when entering on ScreenStackFragment by @kkafar in #4161
- iOS: unregister the tabs accessory observer from the observed wrapper by @safaiyeh in #3948
- iOS: use
hiddeninstead of opacity to switch bottom accessory content views by @sgaczol in #4196 - Android: propagate
actionOrigininto navigation state progression by @kkafar in #3996 - Android: handle Tabs reattachment to the window by @kligarski in #4035
- Android: trigger an appearance update on user tab selection by @kkafar in #4075
- Android: fix a crash on simple navigation with a stack nested in tabs by @kkafar in #4202
- Android: prevent an appearance-change crash after remount when detached by @kligarski in #4271
- Android: handle platform color in tabs appearance props by @kligarski in #4284
Stack
- iOS: forward-declare
RCTSurfaceTouchHandlerinUIView+RNSUtility.hby @zhe-qi in #3986 - iOS: remove the FormSheet scroll view KVO observer synchronously on invalidate by @phewphewb in #4091
- iOS (v4): fix header positioning in the shadow tree by @kligarski in #4286
- iOS: hide React symbols from Swift by @radoslawrolka in #4224
- Android: fix translucent header first-layout correction by @sorinc03 in #4116
- Android: use per-display density for px→dp conversion by @ziponia in #4160, routed through per-display density for all shadow tree state pushes by @kkafar in #4169
- Android: prevent Fabric layout updates from resurrecting header subviews hidden by an expanded search bar by @Dwynr in #4264
Other
- Re-export
TabSelectionPreventedEventfrom the package root by @Ubax in #4142 - Android: handle a nullable Fresco bitmap by @cortinico in #4242, and prevent a Fresco recycled-bitmap crash by copying the bitmap by @kligarski in #4274
- web: replace the SafeAreaView default export with a named export by @roryabraham in #3956
Experimental work (in development for the next major)
The following changes target the next-generation Stack (v5), standalone FormSheet, ScrollViewMarker, and Split View components. They are still in development and not recommended for production use yet.
- Native Stack v5 toolbar menus and header work on Android by @kligarski (#3908, #3965, #4101, #4105, #4126, #4210, #4228, #4234, #4236, #4241) and related fixes (#3927, #4079, #4200)
- Native Stack v5 header items and header refactor on iOS by @kmichalikk (#3868, #4217, #4248, #4261)
- Standalone FormSheet component on iOS by @t0maboro (#3947, #3987, #3988, #3992, #3995, #4014, #4022, #4031, #4086, #4095, #4122, #4123, #4124)
- Standalone FormSheet component on Android by @t0maboro (#4189, #4204, #4218, #4225, #4251, #4259, #4267) and fixes (#4219, #4221)
- Tabs ScrollViewMarker integration on iOS (#4191) and Android (#4192) by @kkafar, plus a web fallback by @satya164 in #4008
- Split View: add the
colorSchemeprop by @sgaczol in #3961, and fix an iOS crash whenmaxWidthis not defined for a column by @t0maboro in #4068
Release card