Я нашел путь сам.=)
Таким образом, ключевой момент состоял в том, чтобы ввести пользовательский навигатор.
Пользовательский навигатор может расширить мой существующий навигатор вкладок, и часть рендеринга может вернуть почти все, что я хочу, плюс обычное представление, что мой TabNavigatorбудет иметь.
У моего приложения есть Навигатор ящиков и вкладок.Так что в моем случае в Навигаторе Drawer есть несколько маршрутов, и одним из маршрутов является Custom Navigator, который расширяет TabNavigator.
Вот мой код:
const MyTab = createBottomTabNavigator({
FirstTabStack,
SecondTabStack,
ThirdTabStack,
FourthTabStack,
});
class CustomNavigator extends React.Component {
static router = MyTab.router;
render() {
const { navigation } = this.props;
return (
{/* This SafeAreaView is from ReactNavigation.
forceInset-bottom-never is needed because the
TabNavigator is already Safe-area-ing the bottom.
You don't want to do it again.*/}
<SafeAreaView style={{ flex: 1 }} forceInset={{ bottom: 'never' }}>
{/* SearchHeader is zIndex: 1(or elevation: 1) for the absolute
positioned stuff that appears and cover the
screen after focusing on Input. */}
<SearchHeader/>
<MyTab navigation={navigation} />
</SafeAreaView>
);
}
}
export default createDrawerNavigator({
CustomNavigator,
SettingsScreen,
LegalScreen,
FeedbackScreen,
VersionScreen,
}, {
drawerType: 'slide',
drawerWidth: 260,
});
PS.Если вы хотите иметь перекрывающее покрытие View с абсолютным позиционным положением, в котором отображается TabNavigator, обязательно используйте zIndex для iOS и elevation для Android !!В моем случае компонент SearchHeader имеет:
const styles = StyleSheet.create({
container: {
...Platform.select({
ios: {
zIndex: 1,
},
android: {
elevation: 1
},
}),
},
{...}
})