我使用使用React-Navigation的CRNA创建了一个项目。在其中一个屏幕中,我有一张覆盖整个屏幕的背景图片,并且要包含标题。
喜欢这张图片:
我应该只隐藏标题并使用包含所需元素的View吗?如果是,在进行深层链接时是否会造成任何麻烦?
React Navigation提供了一个很酷的名为headerTransparent的道具,可用于 以便在标题下呈现内容。
因此处的代码应如下所示:
static navigationOptions = {
headerTransparent: true
}
答案 0 :(得分:6)
现在,借助React Navigation 5,我们可以执行以下操作:
{
headerShown: true,
headerTransparent: true,
}
例如:
const Screen = ({ navigation }) => {
navigation.setOptions({
headerShown: true,
headerTransparent: true,
});
return (
<View>
<Text>Render your component</Text>
</View>
);
};
答案 1 :(得分:3)
这对我有用:
navigationOptions: {
...
headerTransparent: true,
headerStyle: {
backgroundColor: 'transparent',
...
}
}
答案 2 :(得分:1)
要实现此效果,您需要执行以下步骤:
因此您的代码应类似于以下内容:
import React, {Component} from 'react';
import {
StyleSheet,
Button,
ImageBackground,
Platform,
} from 'react-native';
import {
createStackNavigator,
} from 'react-navigation';
class HomeScreen extends Component {
render() {
return (
<ImageBackground
style={styles.container}
source={require('./images/bg.png')}
>
<Button
onPress={() => {}}
title="Just a button"
/>
</ImageBackground>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
paddingTop: Platform.OS === 'ios' ? 60 : 80,
}
});
const App = createStackNavigator({
Home: {
screen: HomeScreen,
navigationOptions: {
title: 'Home',
headerStyle: {
position: 'absolute',
backgroundColor: 'transparent',
zIndex: 100,
top: 0,
left: 0,
right: 0,
elevation: 0,
shadowOpacity: 0,
borderBottomWidth: 0,
}
},
}
})
export default App;
答案 3 :(得分:1)
解决方案:
navigationOptions: {
headerTransparent: {
position: 'absolute',
backgroundColor: 'transparent',
zIndex: 100,
top: 0,
left: 0,
right: 0
}
答案 4 :(得分:1)
我实现了如下设置导航选项的实现:
BirdDetails.navigationOptions = () => {
return {
...NavStyle,
headerStyle: {
backgroundColor: 'transparent',
},
headerTransparent: {
position: 'absolute',
},
headerLeft: <Back></Back>,
headerRight: <HeaderDetailsRight></HeaderDetailsRight>,
};
};
答案 5 :(得分:1)
使用V5
<NavigationContainer>
<Stack.Navigator
initialRouteName="Home"
screenOptions={{
headerShown: true,
headerTransparent:true
}}
>
<Stack.Screen name="Home" component={HomeScreen}/>
<Stack.Screen name="Detail" component={DetailScreen}/>
<Stack.Screen name="Setting" component={SettingScreen}/>
</Stack.Navigator>
</NavigationContainer>
答案 6 :(得分:0)
这对我有用:
headerStyle: {elevation:0, backgroundColor:"transparent"}
将海拔设置为 0,这样就没有阴影了。
答案 7 :(得分:0)
我是这样做的,但它有一个缺陷,背景颜色必须是硬编码的。这种方法专门用于 ScrollView
,从透明到不透明(保留原始文本)。
由于这是为原生堆栈导航器设计的以利用 iOS 的大文本,因此 headerHeight
还需要调整为适当的值。
const navigation = useNavigation();
return (
<ScrollView
onLayout={(e) => {
navigation.setOptions({
headerStyle: {
backgroundColor: "transparent",
},
});
}}
onScroll={(e) => {
const headerOpacity =
Math.min(
Math.max(e.nativeEvent.contentOffset.y, 0) / headerHeight,
1.0
) ?? 0.0;
navigation.setOptions({
headerStyle: {
elevation: headerOpacity,
backgroundColor: `rgba(255,0,0,${headerOpacity})`,
},
});
}}
scrollEventThrottle={16}
contentInsetAdjustmentBehavior="never"
>