yarn react-native-screens 4.19.0

latest releases: 4.20.0-nightly-20251216-94c1d7108, 4.20.0-nightly-20251215-f65b107bd
one day ago

What's Changed

Minor release. It comes with many improvements & bug fixes. Notably:

  1. bottomAccessory support for native tabs on iOS,
  2. special effects support for tabs on Android,
  3. support for synchronous state updates (behind a feature flag),
  4. quite few more.

⚠️ This release also removes long-deprecated native-stack v5 code from the repository.

See the full change set below 👇🏻

Improvements

  • feat: Remove native-stack v5 from screens repo by @kmichalikk in #3433
  • feat(iOS, Tabs): add bottomAccessory support by @kligarski in #3288
  • feat(Android, Tabs): Add special effects to bottom tabs on Android by @Ubax in #3337
  • feat(iOS, SplitView): Add support for primaryBackgroundStyle prop by @t0maboro in #3320
  • feat(Stack): Add support for synchronous state updates on fabric for native stack by @t0maboro in #3282
  • feat(iOS, SafeAreaView): use synchronous state updates by @kligarski in #3335
  • feat(iOS, SplitView): Add an option for changing number of columns dynamically by @t0maboro in #3339
  • feat(iOS, SplitView): Migrate to new invalidate method by @t0maboro in #3364
  • feat(iOS, Tabs): add prop to hide the tab bar by @kligarski in #3343
  • fix(iOS, Stack): handle icon rendering modes for bar button items by @kligarski in #3347
  • feat(Android, Tabs): add prop to hide the tab bar by @kligarski in #3344
  • feat: Bring back gestureResponseDistance on iOS 26 by @kmichalikk in #3353
  • feat(iOS, Stack): Add controller invalidating to new stack impl by @t0maboro in #3219
  • feat: add snapshotAfterUpdates property to RNSScreenView by @bartlomiejbloniarz in #3296
  • feat(iOS, Stack, Tabs, experimental): add prop to override user interface style by @kligarski in #3342
  • fix(Android, Stack): Moving formsheet above keyboard by @t0maboro in #3248
  • chore: Update installation steps in docs by @t0maboro in #3391
  • feat(iOS): add missing features to bar button items by @Ubax in #3396
  • feat(Tabs): special effects refactor by @kligarski in #3440
  • chore: bump FabricExample & lib to react-native@0.83 by @t0maboro in #3456
  • refactor: Remove codegen-related deep imports by @t0maboro in #3458

Bug fixes

  • fix(iOS, SplitView): Track visible columns from delegate by @t0maboro in #3319
  • fix(iOS): Verify that ScrollView gesture hasn't begun when triggering pan gesture by @kmichalikk in #3271
  • fix(iOS, SplitView): Remove tracking presentation layer in favor of sync state update by @t0maboro in #3285
  • fix(iOS, Tabs): fix problems with dynamically changing title, icon, systemItem by @kligarski in #3333
  • fix(iOS, FormSheet): Always use absolute positioning by @t0maboro in #3351
  • fix(Android, Stack): Make MountingCoordinator vector access thread safe by @t0maboro in #3363
  • fix(iOS, Stack): Prevent overriding invalidate callback on Fabric by @t0maboro in #3359
  • fix: RCTViewComponentViewProtocol -> RCTComponentViewProtocol by @t0maboro in #3365
  • fix(iOS, FullWindowOverlay): Show overlay when app returns from background by @t0maboro in #3369
  • fix(iOS): load header items icons synchronously when feasible by @johankasperi in #3355
  • fix(JS, Stack): consider default value for stackPresentation and headerConfig.hidden in ScreenStackItem by @kligarski in #3374
  • fix(iOS, FullWindowOverlay): Move show logic to didMoveToWindow by @t0maboro in #3379
  • fix(Android, Stack): Fix flex-end positioning in formSheet by @t0maboro in #3346
  • fix: circular import in src/types.tsx by @kligarski in #3394
  • fix: Disable interactions on minimal required subroot by @kmichalikk in #3311
  • fix(Android, SAV+Tabs+Stack v4): fix CustomToolbar's insets handling to use insets received from ancestor views by @kligarski in #3240
  • fix(iOS): fix header height in modal, add TestHeaderHeight by @kligarski in #3393
  • fix(Android, Stack): Fix FormSheet - SafeAreaView integration by @t0maboro in #3336
  • fix(Android, Tabs): Fix tabs icons loading in release mode by @t0maboro in #3413
  • fix(Android, Stack): incorrect header height values by @kligarski in #3402
  • fix(iOS, Tabs): remove incorrect warning on none environment in Bottom Accessory by @kligarski in #3416
  • fix(iOS): Distinguish horizontal and vertical scroll in gesture failure requirements by @kmichalikk in #3420
  • fix(Android): layout shift on orientation change by @kmichalikk in #3295
  • fix(iOS, Tabs): tab screen height when tabs are rendered dynamically by @kligarski in #3425
  • fix(iOS, Stack): delay setting navigation bar visibility to mitigate bar button bug on iOS 26 by @kligarski in #3422
  • fix(Android, Stack): Constraint FormSheet height by top inset by @t0maboro in #3404
  • fix(SplitView, Android & Web): move split view warnings to components by @Ubax in #3431
  • fix(examples): Stop triggering CPU intensive tasks in top level scope in example apps by @kkafar in #3432
  • chore: fix imports in bottom accessory by @kligarski in #3439
  • fix(iOS, FormSheet): Add fallback for searching ScrollView which is inside SAV by @t0maboro in #3479
  • fix(Android, FormSheet): Fix pressables with TextInput for Fabric by @t0maboro in #3435
  • fix(JS, stack): Fix push fail after 3rd screen in JS stack by @kmichalikk in #3450
  • fix(Android, Stack, Fabric): Fix jumping content in nested stack for Fabric by @t0maboro in #3442
  • fix(iOS, Tabs): overrideScrollViewContentInsetAdjustmentBehavior in managed tabs by @kligarski in #3441
  • fix(iOS, Stack, Fabric): Pressable hitSlop in header subviews on Fabric by @kligarski in #3446
  • fix(iOS 26, Stack): center view inside bar button item by @kligarski in #3449
  • fix(iOS, Tabs): bottom accessory opacity on appearance change by @kligarski in #3467
  • fix(iOS, FormSheet): Allow handling dynamic content size in FormSheet since 0.82 with synchronous updates enabled by @t0maboro in #3454
  • fix(iOS, Stack): Fix enum conversion for landscape right by @t0maboro in #3474
  • fix(Android): crash on hot reload when FabricUIManagerBinding is null by @kimchi-developer in #3475

Misc

  • chore: Add a note about the known issue with blur for SplitView by @t0maboro in #3330
  • chore: Add BottomTabsOrientationTest by @kmichalikk in #3338
  • chore: Bump material components version by @kmichalikk in #3455
  • chore: Remove doubled "when" from types.tsx and GUIDE_FOR_LIBRARY_AUTHORS by @kmichalikk in #3341
  • refactor(iOS, SplitView): Remove old workaround for navigation headers by @t0maboro in #3349
  • test: Refactor Test3212, add option to set config from scroll view screen by @kmichalikk in #3284
  • chore: Upgrade RN to 0.82.1 by @t0maboro in #3360
  • chore: Upgrade react-navigation to 3d1e4effe by @t0maboro in #3361
  • chore(e2e): detox config general cleanup and ios management by @KrzysztofWojnar in #3412
  • chore: restore react-navigation submodule to 7.x branch by @kligarski in #3370
  • chore: bump @react-native-community/cli to 20.0.0 by @kligarski in #3373
  • refactor(iOS): extract common image loading code to separate class by @kligarski in #3371
  • chore: Bump detox by @t0maboro in #3380
  • chore(iOS): Add multi-scene support for example apps by @t0maboro in #3375
  • chore(deps): bump @react-native-community/cli from 5.0.1 to 20.0.0 by @dependabot[bot] in #3376
  • chore(iOS): bump min deployment target to 15.1 for example apps by @kligarski in #3383
  • chore(Android): remove outdated versioned code by @kligarski in #3382
  • chore: remove not necessary workaround for ScrollView from RN 76 by @WoLewicki in #2350
  • chore(deps): bump js-yaml from 3.14.1 to 3.14.2 in /docs by @dependabot[bot] in #3406
  • refactor(Android, Stack): Extract detents to separate class by @t0maboro in #3409
  • chore: update docs for scrollEdgeEffects, blurEffect and scrollEdgeEffects interaction by @kligarski in #3407
  • chore: change default bottom tabs implementation to managed by @kligarski in #3408
  • chore(deps): bump js-yaml from 3.14.1 to 3.14.2 in /Example by @dependabot[bot] in #3423
  • chore(deps): bump node-forge from 1.3.1 to 1.3.2 in /docs by @dependabot[bot] in #3428
  • chore(deps): bump node-forge from 1.3.1 to 1.3.2 in /TVOSExample by @dependabot[bot] in #3429
  • chore(android): Remove fixOldArchJavaForRN77Compat by @kmichalikk in #3424
  • chore: Add missing #pragma once in header files by @kmichalikk in #3421
  • chore(e2e): detox basic config android by @KrzysztofWojnar in #3426
  • chore(example): use direct import from screens instead of repository-relative by @kkafar in #3434
  • chore(deps): bump mdast-util-to-hast from 13.2.0 to 13.2.1 in /docs by @dependabot[bot] in #3444
  • chore(deps): bump express from 4.21.0 to 4.22.1 in /docs by @dependabot[bot] in #3445
  • chore: remove unnecessary override of prepareForRecycle method in header subview by @kkafar in #3447
  • chore: remove CMake code with support for RN 0.75 or older by @kkafar in #3448
  • refactor: Rename style to absoluteWithNoBottom in ScreenStackItem by @t0maboro in #3461
  • chore: Update docs about dropping the support for RN 0.79 since 4.19.0 by @t0maboro in #3457
  • chore: Sync react-navigation with 7.x branch by @t0maboro in #3468
  • chore: Upgrade TVOSExample to RN 0.81 by @t0maboro in #3465
  • release: 4.19.0 by @kkafar in #3481

New Contributors

Full Changelog: 4.18.0...4.19.0

Don't miss a new react-native-screens release

NewReleases is sending notifications on new releases.