编程语言
首页 > 编程语言> > javascript-React Navigation默认背景色

javascript-React Navigation默认背景色

作者:互联网

我正在使用react-navigation和堆栈导航器来管理屏幕.

我正在使用的平台:

>安卓
> React Native:0.47.1
>反应导航:1.0.0-beta.11
>仿真器和设备

我有一个屏幕,它充当模式形式,但实际上是全屏.为什么“作为一种形式形式的行为”这一部分很重要?那是因为它是一种模态菜单,带有一些选项并且具有透明的背景色.

这是我期望的:

enter image description here

但是我得到的是:

enter image description here

如您所见,在第二个示例中,背景色被完全替换,或者先前装入的组件被卸载,因此我想要获得的效果消失了.
想法是能够像其他任何屏幕一样导航到该屏幕.

如果使用反应导航无法完成任务,我还可以采取其他方法吗?

这个组件执行动作(redux),因为它是一个跨应用程序组件,并且在内部封装了许多机制和逻辑,这就是为什么我不能将其用作使用此组件的组件上的PureComponent中继.至少,将此组件设为PureComponent会迫使我在许多其他组件中复制许多机制和逻辑.

出于问题的考虑,并且为了避免使问题过于复杂,两个屏幕的样式都完全相同,但是通过StackNavigation推送的屏幕将替换backgroundColor或卸载先前的屏幕.

这是我到目前为止所拥有的:

//PlaylistSelector.js
render() {
  //Just a full size empty screen to check and avoid bugs
  //Using red instead of transparent, works

  return (
    <View style={{ flex: 1, backgroundColor: 'transparent' }}>
    </View>
  );
}

//Navigator.js
import { StackNavigator } from 'react-navigation';

import Album from './Album'; //This is the screen I expect to keep at the background
import PlaylistSelector from './PlaylistSelector';

const AppNavigator = StackNavigator(
    {
        ...moreScreens,
        Album: { screen: Album },
        PlaylistSelector: {
            screen: PlaylistSelector,
            navigationOptions: {
                style: { backgroundColor: 'red' } //Does not work, red is just to ilustrate, should be transparent,
                cardStyle: { //Does not work,
                    backgroundColor: 'transparent',
                },
                bodyStyle: { //Does not work,
                    backgroundColor: 'transparent',
                },
            }
        }
    },
    {
        initialRouteName: 'Splash',
        headerMode: 'none',
        cardStyle: { //Does not work
            backgroundColor: 'transparent',
        },
        transitionConfig: (): Object => ({ //Does not work
            containerStyle: {
                backgroundColor: 'transparent',
            },
        }),
    }
);

export default AppNavigator;

解决方法:

通过react-navigation v3.x,您可以使用transparentCard pro:

const MainNavigator = createStackNavigator(
  {
    BottomTabs: {
      screen: BottomTabsStack,
    },
    Modal: {
      screen: ModalScreen,
    }
  },
  {
    headerMode: 'none',
    mode: 'modal',
    transparentCard: true,
    cardStyle: { opacity: 1 } //This prop is necessary for eventually issue.
  }
);

您可以在下面找到完整的示例:

https://snack.expo.io/@cristiankmb/stacks-in-tabs-with-header-options-with-modal

标签:react-navigation,stack-navigator,android,javascript,react-native
来源: https://codeday.me/bug/20191009/1881876.html