繁体   English   中英

是否可以使用 react-navigation (v5) 的 UIModalPresentationPageSheet 或 UIModalPresentationFormSheet 样式呈现模式?

[英]Is it possible to present modals with the UIModalPresentationPageSheet or UIModalPresentationFormSheet style with react-navigation (v5)?

根据Apple 文档,在 iOS 13 上呈现模式默认为UIModalPresentationAutomatic ,它通常映射到UIModalPresentationPageSheet样式。

同样,react-native-screens 似乎支持各种选项,但到目前为止,我无法确定是否可以通过 react-navigation 传递这个,或者 react-navigation 是否完全使用此代码路径。 react-native-screens 似乎默认UIModalPresentationAutomatic ,这让我相信 react-navigation 完全在做其他事情。

是否可以在Stack.Navigator中使用这些较小的模式类型来呈现这些Stack.Screen组件?

这是一个演示该问题的简单 React Native 应用程序。

import "react-native-gesture-handler"
import * as React from "react"
import { Button, View, Text } from "react-native"
import { NavigationContainer } from "@react-navigation/native"
import { createStackNavigator } from "@react-navigation/stack"
function HomeScreen({ navigation }) {
  return (
    <View style={{ flex: 1, alignItems: "center", justifyContent: "center" }}>
      <Text>Home Screen</Text>
      <Button
        title="Go to Details"
        onPress={() => navigation.navigate("Details")}
      />
    </View>
  )
}

function DetailsScreen() {
  return (
    <View style={{ flex: 1, alignItems: "center", justifyContent: "center" }}>
      <Text>Details Screen</Text>
    </View>
  )
}

const Stack = createStackNavigator()

function App() {
  return (
    <NavigationContainer>
      <Stack.Navigator
        mode="modal"
        initialRouteName="Home"
        screenOptions={{
          stackPresentation: "formSheet",
        }}
      >
        <Stack.Screen name="Home" component={HomeScreen} />
        <Stack.Screen name="Details" component={DetailsScreen} />
      </Stack.Navigator>
    </NavigationContainer>
  )
}

export default App

无论指定stackPresentation ,它总是以全屏模式呈现。 如何获得UIModalPresentationFormSheet行为?

在此处输入图像描述

您“只”需要直接从react-native-screens使用createNativeStackNavigator function 。 react-navigation 文档实际上有一节描述了如何设置它。

对于上面的示例应用程序,您只需导入所需的两个函数并将堆栈初始化更改为如下所示

import { createNativeStackNavigator } from 'react-native-screens/native-stack'
import { enableScreens } from 'react-native-screens'

enableScreens()
const Stack = createNativeStackNavigator()

然后在Stack.Navigator组件中设置适当的screenOptions

<Stack.Navigator
  initialRouteName="Home"
  screenOptions={{ 
    headerShown: false, 
    stackPresentation: 'formSheet' 
  }}
>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM