これはわかりにくい質問かもしれませんが、ドキュメントやその他のソースを読みましたが、写真のように、StackNavigator内のヘッダーに2つ以上の追加のクリック可能なアイコンを実装する方法がわかりませんでした。stackNavigatorでバックアイコンを表示したい場合は、メニューアイコンを上書きできます。
これは、(ルート)ホーム画面がどのように見えるかを示しています。ユーザーがコンテンツをクリックし始めたら、menu-itemをstackNavigatorの戻るボタンに置き換える必要があります(理想的にはどのプラットフォームでも)。
これまでに行ったこと:tabs
実行時にオプションを選択することにより、新しいテンプレートから始めましたexpo init
。MainTabNavigator.jsファイルにいくつかの小さな変更を加えました
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;
他の情報源のほかに、私はこれまでに次のWebサイトを調べました。
これは実際にはかなり簡単です。React Navigation V2またはV3を使用していることを考慮して、createStackNavigator
ドキュメントを参照してください。
あなたがそこに持っている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;
私はreact-native-elementsの<Icon />
コンポーネントを使用しました。これらのアイコンにonPress
小道具を与えることで、これらのアイコンをクリック可能にすることができます。
iOSでの結果のスクリーンショットは次のとおりです。
恥知らずなプラグイン: React Navigationについて詳しく知りたい場合は、本番環境に対応したナビゲーション設定を使用してアプリケーションを構築する方法を説明するチュートリアルがお勧めです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加