React Native Screens 4.26.0

v4.26.0minor release

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-native actionOrigin variant by @kkafar in #3951
  • feat(iOS, Tabs): add the bottomAccessoryHidden prop 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*InsetApplication props 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_UP to prevent double-back dismissals by @t0maboro in #4034
  • Include keyboard translationY in 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 progressNavigationState by @kkafar in #3994
  • iOS: register the navigation state observer outside RCTAssert by @kkafar in #4004
  • iOS: weak-capture the tab bar item and screen view in async image callbacks by @cortinico in #4111
  • iOS: remove the invalidate call in didMoveToWindow by @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 hidden instead of opacity to switch bottom accessory content views by @sgaczol in #4196
  • Android: propagate actionOrigin into 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 RCTSurfaceTouchHandler in UIView+RNSUtility.h by @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 TabSelectionPreventedEvent from 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.

Source: 4.26.0 release notes on GitHub (abridged).

Release card
React Native Screens 4.26.0 release card