Uuc*_*zek 4 react-native react-navigation expo react-navigation-stack react-navigation-v5
嘿,我在使用多个Stack.Navigator时遇到透明度问题。
我创建了 2 个Stack.Navigators -> 一个用于Screens,一个用于Popups。问题是,我的弹出窗口具有透明背景,在这种情况下,我需要在背景中显示屏幕。它在 react.navigation v4 中工作,现在在 v5 中我找不到任何解决方案来解决这个问题。
零食 https://snack.expo.io/@m.jachym/react-navigation-stacks-transparency
*有两个Stack.Navigator s,因为Stack.Navigator for Popups有不同的和更复杂的screenOptions。此外,在有关嵌套导航器的文档中,建议将一个Stack.Navigator放在另一个中。在这种情况下,问题是,当您设置父级Stack.Navigator headerMode="screen" 和子级Stack.Navigator headerMode="none" 时,子级的 headerMode 是从父级继承的。其他属性也存在同样的问题 - 这就是为什么我的导航结构保持原样的原因。
我知道我做错了什么,或者这就是新版本的 react-navigation 的问题,我应该写信给 react-navigation 团队吗?*
sat*_*164 12
问题在于,Screens当您在Modals堆栈中显示屏幕时,您希望将堆栈置于后台。您已经为模态堆栈中的屏幕设置了透明背景,但包含Modals堆栈本身的屏幕没有透明背景。
您还需要使包含Modals堆栈的屏幕透明:
<Stack.Screen
name="Modals"
component={Modals}
options={{ cardStyle: { backgroundColor: "transparent" } }}
/>
Run Code Online (Sandbox Code Playgroud)
孩子的 headerMode 是从父级继承的。其他属性也存在同样的问题 - 这就是为什么我的导航结构保持原样的原因。
导航器不继承其父导航器的配置。如果您正在谈论导航器配置(道具)和屏幕,导航器的配置不适用于屏幕(例如,屏幕没有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>
);
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4640 次 |
| 最近记录: |