Releases: software-mansion/react-native-screens
4.22.0
What's Changed
Minor release bringing couple of fixes for the downstream regarding iPad orientation support
and tab-core logic.
Additionally, we've landed few PRs with further development of overhaul of native stack.
These are marked with
🟢 Improvements
⚠️ feat(Android, Stack v5): nested stack uses childFragmentManager of parent container by @kkafar in #3597⚠️ feat(Android, Stack v5): allow for native navigation in nested stacks by @kkafar in #3601
🐛 Bug fixes
- fix(iOS): Respect all screen orientations on iPad by @douglowder in #3609
- fix:
updateSelectedTabremoving unowned fragments by @lukmccall in #3608 ⚠️ fix(Android, Stack v5): update stack model after native pop by @kkafar in #3599
🔢 Misc
- chore(deps): bump tar from 7.5.6 to 7.5.7 by @dependabot[bot] in #3604
- chore(examples): fix import path for tests in apps/App.tsx by @kkafar in #3605
Full Changelog: 4.21.0...4.22.0
4.21.0
What's Changed
Minor release bringing a variety of improvements, including enhanced support for xcassets and initial model for the new native stack implementation. This version also includes several important bug fixes and enhancements, especially for modals, stacks, and opening the dev menu from a key event on Android.
🟢 Improvements
- feat(iOS): add xcassets support by @ajanuar in #3443
- feat(Android): Make commit hook condition for resetting screen size more general by @kmichalikk in #3508
- feat(Android, Stack v5): add skeleton native implementation by @kkafar in #3531
- feat(Android, Stack v5): handle preloading screens by @kligarski in #3576
🐛 Bug fixes
- fix(iOS, Stack): Add compression resistance to button item by @LeviWilliams in #3548
- fix(iOS): FullWindowOverlay is not mounted when fullScreenModal is presented by @kkafar in #3553
- fix(Android, FormSheet): Account initial translationY for default animation by @t0maboro in #3564
- fix: Remove interaction disabling code for modals by @kmichalikk in #3555
- fix(Android, FormSheet): Constraint calculations by screen size by @t0maboro in #3566
- fix: Correct screen size change comparison by @kmichalikk in #3571
- fix(iOS): modal content flicker during enter transition on iPad by @kkafar in #3345
- fix(Android, Fabric): Fix crash when sending key event for opening dev menu by @t0maboro in #3586
- fix(iOS): fix tvOS compilation in split-view by @douglowder in #3590
- fix(iOS): fix possible build issues on Mac Catalyst due to implicit conversions by @kkafar in #3594
- fix(iOS, Stack): Fix for reattaching Screens when swiping back quickly by @t0maboro in #3584
- fix(iOS, Tabs): Request layout pass after loading image from source by @t0maboro in #3596
🔢 Misc
- chore(deps): bump tar from 7.4.3 to 7.5.3 in /FabricExample by @dependabot[bot] in #3541
- chore: Bump react-native to 0.84-rc1 by @kmichalikk in #3543
- chore: Disable prebuilt RN core for FabricExample by @kmichalikk in #3552
- chore(deps): aggregate dependabot updates by @kkafar in #3565
- chore(deps): bump vm2 from 3.9.19 to 3.10.3 by @dependabot[bot] in #3575
- chore: Bump react-navigation and update Test2560 to cover sheetResizeAnimationEnabled by @t0maboro in #3581
- chore: Add information about keyboard handling to sheetLargestUndimmedDetentIndex by @t0maboro in #3582
- chore: Add platform annotation and rephrase sheetLargestUndimmedDetentIndex remark by @t0maboro in #3583
- chore: Refactor library examples & tests by @kmichalikk in #3528
- fix(Android, Examples): Fix crashes in examples below API level 29 by @t0maboro in #3588
- chore(deps): aggregate dependabot updates for tar by @kkafar in #3595
New Contributors
- @LeviWilliams made their first contribution in #3548
- @ajanuar made their first contribution in #3443
Full Changelog: 4.20.0...4.21.0
4.20.0
What's Changed
Minor release bringing improvements to formSheet on Android in form of support for "dynamic content size" when fitToContents is selected. Beside that important a11y update for bottom tabs and other fixes.
🟢 Improvements
- fix(Android, FormSheet): Fix dynamic height change for fitToContents by @t0maboro in #3484
- fix(Android, FormSheet): Fix Y translation when fitToContents content overflows Screen size by @t0maboro in #3522
- feat: Remove componentProvider from package.json by @kmichalikk in #3504
- feat: Add testId and accessibilityLabel for BottomTabsScreen and Item by @kmichalikk in #3497
- feat(Tabs): allow full tabs background color styling by @kligarski in #3492
🐛 Bug fixes
- fix(iOS, Stack): center subview not visible/misaligned in header by @kligarski in #3489
- fix: fix library typing for React 19 by @kkafar in #3509
- fix(iOS): fix issue with ill-formed program due to usage of static_assert(false) by @kkafar in #3523
⚠️ Changes in experimental APIs
- chore(Stack): rename components related to new stack by @kkafar in #3485
- chore(Stack): rename
ScreenStackHosttoStackHostby @kkafar in #3486 - chore(Split): reorganize Split component exports and naming by @kkafar in #3487
- chore(Stack): rename
maxLifecycleStatetoactivityModeby @kkafar in #3505 - feat(Tabs)!: export tabs related components under
Tabsobject + dropBottom*prefix by @kkafar in #3535
🔢 Misc
- chore: Update FormSheet-SAV integration test to cover
sheetShouldOverflowTopInsetby @t0maboro in #3503 - chore(JS): use new platform specific icon syntax in tests by @kligarski in #3490
- chore(Stack): refactor component definition & nomenclature on native side by @kkafar in #3493
- chore(Stack): move impl source files for "host" and "screen" into separate dirs by @kkafar in #3494
- docs(readme): add sorn25 banner by @p-malecki in #3506
- docs(readme): remove sorn25 banner by @p-malecki in #3539
- chore: update PR template with new requirements by @kkafar in #3519
- chore: add reference
StackContainerimplementation by @kkafar in #3518 - chore: Remove react-native-edge-to-edge from example apps by @kmichalikk in #3520
- chore(deps): bump js-yaml from 3.14.1 to 3.14.2 in /TVOSExample by @dependabot[bot] in #3498
- chore(deps): bump js-yaml from 3.14.1 to 3.14.2 in /FabricExample by @dependabot[bot] in #3507
- chore(deps): bump qs from 6.14.0 to 6.14.1 in /docs by @dependabot[bot] in #3513
- chore(deps): bump qs from 6.14.0 to 6.14.1 in /TVOSExample by @dependabot[bot] in #3516
- chore(deps): bump js-yaml from 3.14.1 to 3.14.2 by @dependabot[bot] in #3517
New Contributors
- @p-malecki made their first contribution in #3506
Full Changelog: 4.19.0...4.20.0
4.19.0
What's Changed
Minor release. It comes with many improvements & bug fixes. Notably:
bottomAccessorysupport for native tabs on iOS,- special effects support for tabs on Android,
- support for synchronous state updates (behind a feature flag),
- quite few more.
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
snapshotAfterUpdatesproperty toRNSScreenViewby @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 [email protected] 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
stackPresentationandheaderConfig.hiddeninScreenStackItemby @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.tsxby @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
noneenvironment 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):
overrideScrollViewContentInsetAdjustmentBehaviorin managed tabs by @kligarski in #3441 - fix(iOS, Stack, Fabric): Pressable
hitSlopin 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 https://github.com/software-mansion/re...
4.18.0
Minor release with important changes in bottom tabs icons API, recently added header items API and few more.
What's Changed
🟢 Improvements / Changes
- refactor(Tabs): Refactor APIs for icons by @t0maboro in #3214
- fix(iOS): accept multiple attributes for menu items by @satya164 in #3308
- refactor(iOS): add type to header bar button items by @johankasperi in #3306
- refactor(iOS): rename
label->titlein context of header items API by @kkafar in #3318 - refactor!(iOS): move
changesSelectionAsPrimaryActionto menu button item by @kkafar in #3331
🐞 Bug fixes
- fix(iOS, Tabs): use default UITabBarItem's title font as a base for font configuration by @kligarski in #3310
- fix(iOS, Tabs):
tabBarTintColoron iPadOS by @kligarski in #3314 - fix: prevent freeze from unmounting native components by @kkafar in #3324
- fix(iOS): handle variable icons in header items by @johankasperi in #3323
🔢 Misc
- chore: Remove orientation settings in BottomTabsTest by @kmichalikk in #3312
- chore: use
labelinstead oftitlein example using react-navigation by @kkafar in #3329 - release: 4.18.0 by @kkafar in #3332
Full Changelog: 4.17.1...4.18.0
4.17.1
4.17.0
Minor release including:
- 👉🏻 Important patches for iOS 26 behaviour
- 👉🏻 New API for specifying native header items on iOS by @johankasperi,
- 👉🏻 New experimental safe area component handling native header / bottom tabs, etc.,
- 👉🏻 Support for
UIScrollEdgeEffect, - 👉🏻 Support for "glassy" form sheets on iOS 26,
- 👉🏻 Many other important patches & improvements.
See the full list of PRs below 👇🏻
What's Changed
🟢 Improvements
- feat(iOS): support UIBarButtonItem in header by @johankasperi in #2987
- feat(iOS): add support for using native behavior in
hideNavigationBar,obscureBackgroundprops in SearchBar by @kligarski in #3211 - feat: safe area component PoC by @kligarski in #3208
- feat(iOS): safe area component for iOS by @kligarski in #3209
- feat(iOS): Handle interactiveContentPopGesture for iOS 26 by @kmichalikk in #3173
- feat(iOS): Add scroll edge effects by @kmichalikk in #3212
- feat(Android, Tabs): Update approach for loading external sources for tab icons by @t0maboro in #3216
- feat(Android, Tabs): safe area component for Android by @kligarski in #3215
- feat(iOS): Bring back fullScreenSwipeEnabled prop by @kmichalikk in #3242
- feat(iOS): Support UITabBarController.Mode for iPad sidebar feature by @douglowder in #3236
- feat(iOS, SplitView): SplitView synchronous updates by @t0maboro in #3274
- feat: move
SafeAreaViewcomponent from/privateto/experimentalby @kkafar in #3286
🐞 Bug fixes
- fix(iOS): fix possible build issues for Mac Catalyst due to implicit conversions by @kkafar in #3202
- fix(iOS): Prevent delay when dismissing transparentModals by @kmichalikk in #3189
- fix(iOS, Stack v4): ensure consistent defaults for
obscureBackgroundandhideNavigationBarby @kligarski in #3199 - fix(iOS 26, Stack v4): remove workaround for content under header in modal by @kligarski in #3206
- fix(iOS, Tabs): Implement missing method from RNSViewControllerInvalidating protocol for Screen by @t0maboro in #3227
- fix(iOS, Stack): Deduplicate contentStyle on Screen and ScreenContentWrapper by @t0maboro in #3228
- fix(Android): header config shadow node has wrong origin when
translucent == trueby @maxencehenneron in #3239 - fix(iOS, Stack v4): use
SafeAreaViewin Stack v4 to fix content rendering under UINavigationBar on iOS 26 by @kligarski in #3231 - fix(Android, Stack v4): fix canceling search on Android by @kligarski in #3255
- fix(Android, Fabric, Stack v4): add
autoFocusto SearchBar Fabric spec file by @kligarski in #3258 - fix(Android, Tabs): tab label flashing on tab change in
labeledvisbility mode by @kligarski in #3260 - fix(iOS, Stack v4): add
systemDefaultoption toautoCapitalizeprop inSearchBarby @kligarski in #3251 - fix(Android, Stack): Add logic for reattaching mounting override delegate by @t0maboro in #3241
- feat!(Android, Stack v4): remove native code/deps related to props deprecated by edge-to-edge enforcement by @kligarski in #3264
- fix(iOS): Fix content pop with horizontal scroll by @kmichalikk in #3265
- fix(Android, SplitView): Add fallback for SplitView import error by @t0maboro in #3277
- fix(Android,Tabs): fix usage of transitive R class attr:
colorErrorwith material:1.13.0 by @Ubax in #3280 - fix(iOS): Clear _shouldUpdateScrollEdgeEffects flag in RNSScreen.finalizeUpdates by @kmichalikk in #3283
- Fix custom screen swipe transitions by @piaskowyk in #3254
- fix(iOS, Tabs): change
whiteColortosystemBackgroundColorin tabs background workaround by @kligarski in #3279 - fix(Android, FormSheet): Add fallback for undefined corner radius by @t0maboro in #3291
- fix(Android): crash API 25 when going back from screen with flat list by @maciekstosio in #2964
- fix(iOS, Tabs): update tab bar item only when necessary by @kligarski in #3290
🔢 Misc
- chore: create
react-native-screens/experimentalsubmodule by @kkafar in #3222 - chore: move gamma symbols into experimental package by @kkafar in #3223
- docs: fix testimonial name by @ferrannp in #3194
- Update README.md by @sharifhh in #3201
- chore(deps): bump brace-expansion from 1.1.11 to 1.1.12 in /Example by @dependabot[bot] in #3151
- chore(iOS): remove outdated SDK version checks (iOS < 15.1) by @kligarski in #3204
- refactor: review 3097 - make split screen controller & component the frame correction provider by @kkafar in #3179
- chore: Configure OIDC for nightly builds by @kmagiera in #3220
- chore(deps): bump rexml from 3.3.9 to 3.4.2 in /FabricExample by @dependabot[bot] in #3225
- refactor: move types related to
ScreenStackHost&StackScreento separate files by @kkafar in #3224 - chore: move gamma components into dedicated directories by @kligarski in #3243
- chore: Move ScrollEdgeEffectApplicator to helpers/scroll-view, backport by @kmichalikk in #3253
- chore(Example, Tabs): use SAV in BottomTabsContainer by @kligarski in #3256
- chore: bump FabricExample & lib to
[email protected]by @kligarski in #3259 - fix(Android): sync architectures after bump to
[email protected]by @kligarski in #3261 - chore(deps): bump rexml from 3.3.9 to 3.4.2 in /TVOSExample by @dependabot[bot] in #3262
- chore: Move BottomTabs props configuration outside of BottomTabsContainer by @kmichalikk in #3246
- chore: Uncomment tabBarMinimizeBehavior config in TestSafeAreaViewIOS by @kmichalikk in #3247
- chore(deps): bump rexml from 3.3.9 to 3.4.2 in /Example by @dependabot[bot] in #3267
- chore(iOS): Add test case for scrollEdgeEffects by @kmichalikk in #3244
- feat(iOS): Implement ScrollViewProviding protocol by @kmichalikk in #3238
- test(iOS, SplitView): Add example for testing performance by @t0maboro in #3287
- refactor(Android, Tabs): Move image loader logic to TabsImageLoader by @t0maboro in #3292
New Contributors
- @sharifhh made their first contribution in #3201
- @maxencehenneron made their first contribution in #3239
- @douglowder made their first contribution in #3236
- @johankasperi made their first contribution in #2987
Full Changelog: 4.15...4.17.0
4.16.0
This release introduces support for dark mode in Bottom Tabs on Android, new search bar placements and search bar integration with the toolbar on iOS 26.
Caution
In this release, library installation steps for Android have been modified - please refer to the "Installation" section of README and this PR for more details.
Important
In order to align our library with native iOS 26 behavior, we've decided to change default placement value in RNSSearchBar to 'automatic'. This change will make it easier for users to adopt the new integrated search bar on iOS 26.
Additionally, we've fixed the default value for hideWhenScrolling prop in new architecture to match the old architecture and native UIKit behavior.
What's Changed
🟢 Improvements
- feat(iOS, Tabs): add shadow color to appearance by @Ubax in #3180
- feat(iOS, Stack v4): bring back view recycling for ContentWrapper by @kligarski in #3187
- feat(Android): Support dark mode in android BottomTabs by @kmichalikk in #3167
- feat(iOS 26, Stack v4): support for new search bar placements, integration with toolbar by @kligarski in #3168
- feat!(iOS, Stack v4): change search bar related prop defaults by @kligarski in #3186
🐞 Bug fixes
- fix(Android): add custom fragment factory & modify library installation steps to prevent on-restoration crashes by @Skalakid in #3089
🔢 Misc
- chore(FabricExample): bump react-native-safe-area-context by @kmichalikk in #3175
- refactor: review of #3073 - rename few methods, move update logic to shadow state proxy by @kkafar in #3176
- chore(deps): bump RN to 0.81.1 in lib & apps by @kkafar in #3185
- chore(iOS): add RNS_IPHONE_OS_VERSION_AVAILABLE macro by @kligarski in #3171
New Contributors
Full Changelog: 4.15.4...4.16.0
4.15.4
Patch version fixing a bug on iOS with back button title disappearing when stack was used in bottom tabs.
What's Changed
- fix(iOS, Stack v4 + Tabs): back button title disappearing when nested in tab by @kligarski in #3166
Full Changelog: 4.15.3...4.15.4
4.15.3
Patch version fixing bugs related to systemItem on iOS Bottom Tabs.
What's Changed
- fix(iOS, Tabs): refactor setting systemItem by @kligarski in #3164
Full Changelog: 4.15.2...4.15.3