嘿,当我使用多个 Stack.Navigator 时,透明度存在问题。
我创建2个 Stack.Navigators ->一个用于屏幕,另一个用于弹出窗口。 问题是我的弹出窗口具有透明的背景,在这种情况下,我需要在背景中显示屏幕。它已在react.navigation v4中运行,现在在v5中我找不到任何解决方案来解决此问题。
小吃 https://snack.expo.io/@m.jachym/react-navigation-stacks-transparency
*有两个 Stack.Navigator ,因为用于Popups的 Stack.Navigator 具有不同且复杂得多的 screenOptions 。 另外,在Docs about nesting navigators中,建议将一个 Stack.Navigator 放在另一个内部。在这种情况下,问题是,当您设置父 Stack.Navigator headerMode =“ screen”和子 Stack.Navigator headerMode =“ none”时,子项headerMode为从父级继承。其他属性也存在相同的问题-这就是为什么导航结构保持原样。
Idk我做错了什么,或者那是新版本的react-navigation的问题,我应该写信给react-navigation团队吗?*
答案 0 :(得分:4)
问题在于,当您在Screens
堆栈中显示屏幕时,希望将Modals
堆栈放在后台。您已为模式堆栈中的屏幕设置了透明背景,但是包含Modals
堆栈本身的屏幕没有透明背景。
您还需要使包含Modals
堆栈的屏幕透明:
<Stack.Screen
name="Modals"
component={Modals}
options={{ cardStyle: { backgroundColor: "transparent" } }}
/>
childrens的headerMode继承自parent。其他属性也存在相同的问题-这就是为什么导航结构保持原样。
导航器不会继承其父导航器的配置。如果您在谈论导航器配置(属性)和屏幕,则导航器的配置不适用于屏幕(例如,屏幕没有headerMode
)。
您不需要那么多的导航器。像这样的单个导航器就可以了:
const modalOptions = {
headerShown: false,
cardStyle: { backgroundColor: "transparent" },
cardOverlayEnabled: true,
cardStyleInterpolator: ({ current: { progress } }) => ({
cardStyle: {
opacity: progress.interpolate({
inputRange: [0, 0.5, 0.9, 1],
outputRange: [0, 0.1, 0.3, 0.7]
})
},
overlayStyle: {
opacity: progress.interpolate({
inputRange: [0, 1],
outputRange: [0, 0.6],
extrapolate: "clamp"
})
}
})
};
const Navigation = () => {
return (
<Stack.Navigator headerMode="screen">
<Stack.Screen name="Home" component={Home} />
<Stack.Screen
name="NewPopup"
component={NewPopup}
options={modalOptions}
/>
<Stack.Screen name="Popup" component={Popup} options={modalOptions} />
</Stack.Navigator>
);
};