Expo Router模态栈屏中自定义模态/选择器被遮挡问题求助
React Native Expo 模态屏幕中选择器组件被遮挡问题
我正在学习React Native,基于Expo开发。将create.js页面的Stack.Screen选项中presentation设为'modal'后,在该页面的表单里使用Tamagui、Gluestack或React Native Paper的SELECT组件时,选项列表会被当前的create.js页面遮挡;尝试给选择器父元素设置最大z-index也没用,自定义模态框同样会被遮挡。
相关代码
<Stack.Screen name="create" // <--- 对应create.js页面 options={{ headerShown: false, presentation: 'modal', }} />
问题截图

解决方法
调整模态屏幕容器样式
在Stack.Screen的options中添加配置,解除模态容器对内部元素层级的限制:<Stack.Screen name="create" options={{ headerShown: false, presentation: 'modal', statusBarTranslucent: true, cardStyle: { backgroundColor: 'transparent', elevation: 0, shadowOpacity: 0 } }} />利用UI组件自带层级配置
不同库的选择器组件有专属层级控制属性:- React Native Paper:给
Dropdown组件设置overlayStyle={{zIndex: 9999}} - Tamagui:给
Select组件开启portal={true},将弹出层挂载到根节点 - Gluestack:给
Select组件添加zIndex="50"及以上的样式值
- React Native Paper:给
切换全屏模态模式
把presentation改为'fullScreenModal',这种模式下不会限制内部弹出层的层级:<Stack.Screen name="create" options={{ headerShown: false, presentation: 'fullScreenModal', }} />手动挂载弹出层到根视图
使用UI库的Portal组件或React Native原生Modal,将选择器的选项列表直接挂载到应用根节点,绕过当前模态屏幕的层级约束。
内容的提问来源于stack exchange,提问作者Leouie Tabique
相关产品推荐
相关产品推荐

