如何自定义React Native Navigation的cardOverlay样式实现黑色背景
核心解决思路
不需要自行添加额外的View,直接自定义导航器自带的遮罩层样式即可,两种主流栈导航库的配置方案如下:
方案1:适用于@react-navigation/stack(JS实现的栈导航)
直接在原有options配置中新增cardOverlayStyle属性修改遮罩颜色:
options={{ gestureEnabled: true, cardOverlayEnabled: true, ...TransitionPresets.ModalSlideFromBottomIOS, cardStyleInterpolator: CardStyleInterpolators.forModalPresentationIOS, mode: 'modal', // 新增遮罩样式配置 cardOverlayStyle: { backgroundColor: 'rgba(0, 0, 0, 0.7)', // 最后一位参数为透明度,可按需调整深浅 } }}
方案2:适用于@react-navigation/native-stack(原生实现的栈导航,性能更优)
直接配置overlayColor属性即可:
options={{ gestureEnabled: true, presentation: 'modal', // 直接指定遮罩颜色 overlayColor: 'rgba(0, 0, 0, 0.7)', }}
原理说明
你自行添加的黑色View属于新模态页的根节点内容,层级在导航遮罩之上,占满屏幕后自然会挡住底层页面。导航器自带的cardOverlay层级恰好位于底层页面和新模态页之间,修改它的样式就能得到目标效果:
内容的提问来源于stack exchange,提问作者nishi
相关产品推荐
相关产品推荐

