diff --git a/packages/stack/example/App.js b/packages/stack/example/App.js
index 671817a0..c3e790da 100644
--- a/packages/stack/example/App.js
+++ b/packages/stack/example/App.js
@@ -25,6 +25,7 @@ import {
HeaderBackgroundDefault,
HeaderBackgroundFade,
} from './src/HeaderBackgrounds';
+import DragLimitedToModal from './src/DragLimitedToModal';
// Comment the following two lines to stop using react-native-screens
// eslint-disable-next-line import/no-unresolved
@@ -88,6 +89,11 @@ const data = [
title: 'Header background (fade transition)',
routeName: 'HeaderBackgroundFade',
},
+ {
+ component: DragLimitedToModal,
+ title: 'Drag limited to modal',
+ routeName: 'DragLimitedToModal',
+ },
];
// Cache images
diff --git a/packages/stack/example/src/DragLimitedToModal.js b/packages/stack/example/src/DragLimitedToModal.js
new file mode 100644
index 00000000..ccbedac6
--- /dev/null
+++ b/packages/stack/example/src/DragLimitedToModal.js
@@ -0,0 +1,50 @@
+import React from 'react';
+import { View, Text, StyleSheet, Dimensions } from 'react-native';
+import Animated from 'react-native-reanimated';
+
+const HEIGHT = Dimensions.get('screen').height;
+
+const { interpolate } = Animated;
+
+const DragLimitedToModal = () => (
+
+ Adjusts to the size of text
+
+);
+
+DragLimitedToModal.navigationOptions = {
+ gestureDirection: 'vertical',
+ gestureResponseDistance: { vertical: HEIGHT },
+ cardTransparent: true,
+ cardStyleInterpolator: ({ current }) => {
+ const translateY = interpolate(current.progress, {
+ inputRange: [0, 1],
+ outputRange: [HEIGHT, 0],
+ });
+
+ return {
+ cardStyle: {
+ transform: [{ translateY }],
+ flex: undefined,
+ },
+ containerStyle: {
+ alignItems: 'center',
+ justifyContent: 'center',
+ },
+ };
+ },
+};
+
+const styles = StyleSheet.create({
+ modal: {
+ padding: 30,
+ borderRadius: 15,
+ backgroundColor: '#000',
+ },
+ text: {
+ fontSize: 18,
+ color: '#fff',
+ },
+});
+
+export default DragLimitedToModal;
diff --git a/packages/stack/src/navigators/__tests__/__snapshots__/NestedNavigator.test.tsx.snap b/packages/stack/src/navigators/__tests__/__snapshots__/NestedNavigator.test.tsx.snap
index 33b76b2b..a6501090 100644
--- a/packages/stack/src/navigators/__tests__/__snapshots__/NestedNavigator.test.tsx.snap
+++ b/packages/stack/src/navigators/__tests__/__snapshots__/NestedNavigator.test.tsx.snap
@@ -146,6 +146,7 @@ Array [
"flex": 1,
"overflow": "hidden",
},
+ null,
Object {
"backgroundColor": "#eee",
},
@@ -297,6 +298,7 @@ Array [
"flex": 1,
"overflow": "hidden",
},
+ null,
Object {
"backgroundColor": "#eee",
},
diff --git a/packages/stack/src/navigators/__tests__/__snapshots__/StackNavigator.test.tsx.snap b/packages/stack/src/navigators/__tests__/__snapshots__/StackNavigator.test.tsx.snap
index 714d70e1..49ca118e 100644
--- a/packages/stack/src/navigators/__tests__/__snapshots__/StackNavigator.test.tsx.snap
+++ b/packages/stack/src/navigators/__tests__/__snapshots__/StackNavigator.test.tsx.snap
@@ -146,6 +146,7 @@ Array [
"flex": 1,
"overflow": "hidden",
},
+ null,
Object {
"backgroundColor": "#eee",
},
@@ -464,6 +465,7 @@ Array [
"flex": 1,
"overflow": "hidden",
},
+ null,
Object {
"backgroundColor": "#eee",
},
diff --git a/packages/stack/src/views/Stack/Card.tsx b/packages/stack/src/views/Stack/Card.tsx
index e300c4b0..c59408b7 100755
--- a/packages/stack/src/views/Stack/Card.tsx
+++ b/packages/stack/src/views/Stack/Card.tsx
@@ -638,6 +638,14 @@ export default class Card extends React.Component {
: this.handleGestureEventHorizontal
: undefined;
+ let overrideFlex = null;
+ if (cardStyle) {
+ const style = StyleSheet.flatten(cardStyle) as ViewStyle;
+ if (style.hasOwnProperty('flex')) {
+ overrideFlex = { flex: style.flex };
+ }
+ }
+
return (
@@ -681,6 +689,7 @@ export default class Card extends React.Component {
progress={this.props.current}
style={[
styles.content,
+ overrideFlex,
transparent ? styles.transparent : styles.opaque,
contentStyle,
]}