使用抽屉导航时,React Navigation标头不可见

问题描述 投票:1回答:2

下面是我使用抽屉导航的代码。但HomeScreen上给出的标题消失了,不可见。我只使用抽屉导航,没有导航嵌套。

App.js文件 -

 import React, { Component } from "react";
import { Platform, StyleSheet, Text, View } from "react-native";
import MyApp from "./src/router/router";

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

router.js文件 -

import {
  createDrawerNavigator,
  createAppContainer
} from "react-navigation";
import Sidebar from "../components/Sidebar/Sidebar";
import HomeScreen from "../components/HomeScreen/HomeScreen";

const MyDrawerNavigator = createDrawerNavigator(
  {
    Home: {
      screen: HomeScreen
    }
  },
  {
    contentComponent: Sidebar,
    drawerWidth: 200,

  }
);

const App = createAppContainer(MyDrawerNavigator);

export default App;

HomeScreen.js文件 -

import React, { Component } from "react";
import {
  Text,
  View,
  ScrollView,
  TextInput,
  TouchableOpacity,
  Image
} from "react-native";
import { Calendar } from "react-native-calendars";
import ham from "../../assets/images/ham.png";

export default class HomeScreen extends Component {
  static navigationOptions = {
    drawerLabel: "Maruti Hotel Management",
    headerStyle: {
      backgroundColor: "#ED5A6C"
    },
    headerTintColor: "#fff",
    headerTitleStyle: {
      fontWeight: "bold",
      flex: 1,
      textAlign: "center"
    }
  };

  state = {
    markedDate: {}
  };

  dateSelectHandler = date => {
    let selectedDate = date.dateString;
    this.setState({
      markedDate: {
        [selectedDate]: {
          selected: true,
          marked: true,
          selectedColor: "#ED5A6C"
        }
      }
    });
  };

  render() {
    return (
      <ScrollView style={{ flex: 1 }}>
        <Calendar
          style={{ flex: 1 }}
          // Initially visible month. Default = Date()
          onDayPress={day => {
            console.log(day);
            this.dateSelectHandler(day);
          }}
          markedDates={this.state.markedDate}
          theme={{
            "stylesheet.calendar.header": {
              week: {
                marginTop: 5,
                flexDirection: "row",
                justifyContent: "space-around",
                backgroundColor: "#ED5A6C",
                color: "red"
              },
              dayHeader: {
                marginTop: 2,
                marginBottom: 7,
                width: 32,
                textAlign: "center",

                color: "#fff"
              }
            },
            calendarBackground: "#F5A5AE",

            arrowColor: "#ED5A6C",
            monthTextColor: "#ED5A6C",
            dayTextColor: "#ED5A6C",
            todayTextColor: "blue"
          }}
        />
        <View
          style={{
            flex: 1,
            backgroundColor: "#F07886",
            alignItems: "center",
            paddingTop: "2%",
            paddingBottom: "10%"
          }}
        >
          <Text
            style={{
              textAlign: "center",
              color: "#FFF",
              fontWeight: "500",
              fontSize: 17
            }}
          >
            Total Income (गल्ला)
          </Text>
          <TextInput
            style={{
              borderBottomColor: "#fff",
              borderBottomWidth: 1,
              paddingRight: "3%",
              paddingLeft: "3%",
              marginBottom: "2%",
              width: "80%"
            }}
            editable={true}
            maxLength={40}
            placeholder="Rs"
          />

          <TouchableOpacity style={{ width: "80%", marginTop: "2%" }}>
            <View
              style={{
                borderRadius: 5,
                backgroundColor: "#D85263",
                paddingTop: 10,
                paddingBottom: 10,
                // paddingLeft: 15,
                // paddingRight: 15,
                justifyContent: "center",
                alignItems: "center"
              }}
            >
              <Text
                style={{
                  width: "80%",
                  textAlign: "center",
                  color: "#fff",
                  fontWeight: "700",
                  fontSize: 16,
                  letterSpacing: 2
                }}
              >
                Submit
              </Text>
            </View>
          </TouchableOpacity>
        </View>
      </ScrollView>
    );
  }
}

请帮忙,因为我被卡住了,已经看过类似的问题,但没有运气

javascript reactjs react-native react-navigation
2个回答
1
投票

使用通用标头组件并在需要标头的每个屏幕中实现它。从屏幕传递标题名称作为prop

标题组件:

class PageHeader extends Component {
        <Header>
          <Left>
            <Button
              transparent
              onPress={() => this.props.navigation.openDrawer()}
            >
              <Icon name="menu" />
            </Button>
          </Left>
          <Body>
            <Title>{this.props.title}</Title>
          </Body>
          <Right />
        </Header>
}
export default PageHeader;

样本屏幕:

<Container style={styles.container}>
        <PageHeader title="Home" />

        <View>
          // screen view
        </View>
      </Container>

1
投票

我发现使用和自定义不同屏幕的标头的最佳方法是使用react-native-elements的Header组件。您只需将组件添加到您希望标题所在的每个屏幕上。另外,不要忘记在stackNavigator上执行header:null,这样它就不会在屏幕上显示2个标题。

示例如下:

<React.Fragment>
  <Header
    statusBarProps={{ barStyle: 'light-content' }}
    barStyle="light-content"
    leftComponent={
      <SimpleIcon
        name="menu"
        color="#34495e"
        size={20}
      />
    }
    centerComponent={{ text: 'HOME', style: { color: '#34495e' } }}
    containerStyle={{
      backgroundColor: 'white',
      justifyContent: 'space-around',
    }}
  />
</React.Fragment>
© www.soinside.com 2019 - 2024. All rights reserved.