From 455c5b61e1862fc1281f961435e6fc9a976d5925 Mon Sep 17 00:00:00 2001 From: Brent Vatne Date: Fri, 14 Sep 2018 12:33:57 +0200 Subject: [PATCH] Merge pull request #20 from janicduplessis/no-neg-margin Use padding instead of negative margin in StackViewLayout --- .../NestedNavigator-test.js.snap | 20 +++++++++++++-- .../__snapshots__/StackNavigator-test.js.snap | 20 +++++++++++++-- .../src/views/StackView/StackViewLayout.js | 25 +++++++++++++------ 3 files changed, 53 insertions(+), 12 deletions(-) diff --git a/packages/stack/src/navigators/__tests__/__snapshots__/NestedNavigator-test.js.snap b/packages/stack/src/navigators/__tests__/__snapshots__/NestedNavigator-test.js.snap index 8b820d2f..75be948d 100644 --- a/packages/stack/src/navigators/__tests__/__snapshots__/NestedNavigator-test.js.snap +++ b/packages/stack/src/navigators/__tests__/__snapshots__/NestedNavigator-test.js.snap @@ -50,8 +50,8 @@ exports[`Nested navigators renders succesfully as direct child 1`] = ` "backgroundColor": "#E9E9EF", "bottom": 0, "left": 0, - "marginTop": 0, "opacity": 1, + "paddingTop": 64, "position": "absolute", "right": 0, "shadowColor": "black", @@ -122,8 +122,8 @@ exports[`Nested navigators renders succesfully as direct child 1`] = ` "backgroundColor": "#E9E9EF", "bottom": 0, "left": 0, - "marginTop": 0, "opacity": 1, + "paddingTop": 64, "position": "absolute", "right": 0, "shadowColor": "black", @@ -149,6 +149,14 @@ exports[`Nested navigators renders succesfully as direct child 1`] = ` + {this._renderHeader(scene, headerMode)} ); @@ -595,22 +599,21 @@ class StackViewLayout extends React.Component { screenInterpolator && screenInterpolator({ ...this.props.transitionProps, scene }); - // If this screen has "header" set to `null` in it's navigation options, but - // it exists in a stack with headerMode float, add a negative margin to - // compensate for the hidden header + // When using a floating header, we need to add some top + // padding on the scene. const { options } = scene.descriptor; const hasHeader = options.header !== null; const headerMode = this._getHeaderMode(); - let marginTop = 0; - if (!hasHeader && headerMode === 'float') { - marginTop = -this.state.floatingHeaderHeight; + let paddingTop = 0; + if (hasHeader && headerMode === 'float' && !options.headerTransparent) { + paddingTop = this.state.floatingHeaderHeight; } return ( {this._renderInnerScene(scene)} @@ -631,6 +634,12 @@ const styles = StyleSheet.create({ scenes: { flex: 1, }, + floatingHeader: { + position: 'absolute', + left: 0, + top: 0, + right: 0, + }, }); export default withOrientation(StackViewLayout);