这可能是一个不切实际的问题,但尽管我阅读了文档和其他来源,但我仍然没有找到how to implement two or more additional, clickable icons in the header within a StackNavigator个,就像图中所示.如果stackNavigator想要显示后退图标,他可以覆盖菜单图标.

这就是(根)主屏幕的外观.一旦用户开始点击内容,菜单项应替换为stackNavigator上的后退按钮(最好是在任何平台上).

What I did so far:我从一个全新的模板开始,在运行expo init时 Select 选项tabs.我对文件做了一些小修改

import React from 'react';
import { Platform } from 'react-native';
import { createStackNavigator, createBottomTabNavigator } from 'react-navigation';
import CustomHeader from '../components/CustomHeader';
import HomeScreen from '../screens/HomeScreen';    

const HomeStack = createStackNavigator( { Home: HomeScreen }, {
   // default config for screens in the stack, so `Home` will use this title 
  navigationOptions: { 
    title: 'Protype Prompter: Browse',
    header: props => <CustomHeader {...props} />,
    }}
);
// All other code stays like provided by expo init.
export default createBottomTabNavigator({
  HomeStack,
});

接下来,我确保在HomeScreen.js以内,标题不会被覆盖:

export default class HomeScreen extends React.Component {
  /* static navigationOptions = {
    header: null,
  }; */

请帮我拿CustomHeader.js英镑.到目前为止,我所有的努力都没有导致主屏幕上出现任何可见的变化.

import React from "react";
import { Header } from "react-navigation";
import { View, Platform, Image, StyleSheet } from "react-native";
import { SimpleLineIcons } from '@expo/vector-icons'; 
const CustomHeader = props => {
  return (
    <View>
        <SimpleLineIcons name="menu" size={24} color={tintColor} />
         <Header headerLeft={<SimpleLineIcons name="menu" size={24} color='#6a1b9a' />} {...props} />
    </View>
  );
};
export default CustomHeader;

除其他来源外,我还查阅了以下网站:

  1. 关于headersheader buttons的文件
  2. github discussion on a react-navitation issue美元
  3. 一个howto on modifying headers,另一个customer headers with react-navigation.后者似乎是一个很好的起点.

推荐答案

这其实很简单.考虑到您使用的是React Navigation V2或V3,请查看createStackNavigator docs.

这里有一个headerLeft和一个headerRight设置,它们都可以接受一个自定义组件.因此,您可以轻松地编写示例标题.

编辑

所以我快速编写了一个例子:

在你的App.js:

import React, { Component } from "react";
import Navigator from "./navigation/navigation";

export default class App extends Component {
  render() {
    return <Navigator />;
  }
}

navigation.js:

import { createStackNavigator } from "react-navigation";
import HomeScreen from "../screens/HomeScreen";

const RootStack = createStackNavigator({ HomeScreen });

export default RootStack;

现在,您可以按如下方式逐个屏幕设计标题:

import React, { Component } from "react";
import { Platform, StyleSheet, Text, View } from "react-native";
import { SafeAreaView } from "react-navigation";
import { Icon } from "react-native-elements";

const styles = StyleSheet.create({
  container: {
    flex: 1
  },
  icon: {
    paddingLeft: 10
  },
  iconContainer: {
    flexDirection: "row",
    justifyContent: "space-evenly",
    width: 120
  }
});

export class HomeScreen extends Component {
  static navigationOptions = {
    title: "Title",
    headerLeft: (
      <Icon
        containerStyle={styles.icon}
        type="ionicon"
        name={Platform.OS === "ios" ? "ios-menu" : "md-menu"}
      />
    ),
    headerRight: (
      <View style={styles.iconContainer}>
        <Icon type="ionicon" name={Platform.OS === "ios" ? "ios-search" : "md-search"} />
        <Icon type="ionicon" name={Platform.OS === "ios" ? "ios-heart" : "md-heart"} />
        <Icon type="ionicon" name={Platform.OS === "ios" ? "ios-more" : "md-more"} />
      </View>
    )
  };

  render() {
    return (
      <SafeAreaView styles={styles.container}>
        <Text>Hi from the HomeScreen.</Text>
      </SafeAreaView>
    );
  }
}

export default HomeScreen;

我使用了the <Icon /> component个来自react native elements的元素.你可以给这些图标一个onPressprops ,让它们可以点击.

以下是iOS上的结果截图:

enter image description here

Shameless plug:

React-native相关问答推荐

如何在API调用期间将本地存储(Expressc存储)中的令牌传递到后台

单击时更改ToucheableOpacity colored颜色 不起作用

React Native 在每个页面加载时调用数据库

何时在 React Native 中使用辅助功能 Role='link'?

调用 ES6 方法时绑定上下文.如何从称为回调的方法中访问对象?

如何在react-native 中从 FlatList 中删除元素/索引?

在 React Native Paper 中更改 TextInput 的文本 colored颜色

在Windows中连接到远程调试器时react-native 超时

React - 类内的useContext

如何在 react-native 中在子级和父级之间传递数据?

如何在 React Native 中访问原生 UI 组件的实例方法

Realm 和 React Native - 实现自动更新的最佳实践?

在react native 中出现Cannot read property 'pick算法rithm' of null错误

react-native android应用程序中的underlineColorAndroid is not a valid style property错误

使用 WSL2 运行时如何将手机连接到 expo

为什么,确切地说,我们需要 React.forwardRef?

React Native Android 文本组件额外填充

带有父 PanResponder 的 TouchableOpacity

KeyboardAvoidingView - 隐藏键盘时重置高度

如何从 React-Native 中的另一个类调用函数?