diff --git a/android/src/main/java/com/swmansion/rnscreens/Screen.kt b/android/src/main/java/com/swmansion/rnscreens/Screen.kt index a601100985..01a7bc5ef1 100644 --- a/android/src/main/java/com/swmansion/rnscreens/Screen.kt +++ b/android/src/main/java/com/swmansion/rnscreens/Screen.kt @@ -19,6 +19,7 @@ import com.facebook.react.uimanager.PixelUtil import com.facebook.react.uimanager.UIManagerHelper import com.facebook.react.uimanager.UIManagerModule import com.facebook.react.uimanager.events.EventDispatcher +import com.facebook.react.views.scroll.ReactScrollView import com.google.android.material.bottomsheet.BottomSheetBehavior import com.swmansion.rnscreens.events.HeaderHeightChangeEvent import com.swmansion.rnscreens.events.SheetDetentChangedEvent @@ -384,6 +385,15 @@ class Screen( startTransitionRecursive(child.toolbar) } if (child is ViewGroup) { + // The children are miscounted when there's a FlatList with + // removeCLippedSubviews set to true (default). + // We add a simple view for each item in the list to make it work as expected. + // See https://github.com/software-mansion/react-native-screens/issues/2282 + if (it is ReactScrollView && it.removeClippedSubviews) { + for (j in 0 until child.childCount) { + child.addView(View(context)) + } + } startTransitionRecursive(child) } } diff --git a/apps/src/tests/Test2282.tsx b/apps/src/tests/Test2282.tsx new file mode 100644 index 0000000000..6ee9b61b66 --- /dev/null +++ b/apps/src/tests/Test2282.tsx @@ -0,0 +1,32 @@ +import React from 'react'; +import { FlatList, Button, Text } from 'react-native'; +import { createNativeStackNavigator } from '@react-navigation/native-stack'; +import { NavigationContainer } from '@react-navigation/native'; + +const Stack = createNativeStackNavigator(); + +const First = ({ navigation }: any) => ( +