【问题标题】:Change background color of top bar when navigation drawer is opened打开导航抽屉时更改顶部栏的背景颜色
【发布时间】:2020-07-27 11:44:56
【问题描述】:

我正在开发一个 react-native 项目。我的屏幕是白色的,但是左侧的导航抽屉是深灰色的,我想让屏幕的顶部栏部分在抽屉打开时也显示为深灰色,但在抽屉关闭时仍显示为白色,如何实现那个?

我在抽屉里使用"@react-navigation/drawer": "^5.8.6"

<Drawer.Navigator
    initialRouteName={InitialScreen}
    drawerContent={props => <MyDrawer {...props} />}
    screenOptions={{
        headerShown: true,
    }}>
    <Drawer.Screen name="main" component={MainScreen} />
</Drawer.Navigator>

如您所见,我正在为抽屉内容 &lt;MyDrawer /&gt; 使用自定义布局,在那里,我将背景设置为深灰色。

以下屏幕截图显示了抽屉打开时的样子。

【问题讨论】:

  • 您还可以在抽屉打开时隐藏状态栏。或者这不是你的选择?

标签: android react-native react-native-navigation


【解决方案1】:

我认为您可以使用这个钩子 (Drawer hook) 和 react-native &lt;StatusBar /&gt; (React native status bar) 轻松更改它。类似的东西:

const Drawer = createDrawerNavigator()

export function Screen(props) {
  const isDrawerOpen = useIsDrawerOpen()
  return (<>
    <StatusBar backgroundColor={isDrawerOpen ? colors.darkGrey : colors.white}/>
    {props.children}
  </>)
}

export function MainScreen(props) {
  return (
    <Screen>
      ...
    </Screen>
  )
}

export function test() {
  return (
    <>
      <Drawer.Navigator
        initialRouteName={InitialScreen}
        drawerContent={props => <MyDrawer {...props} />}>
        <Drawer.Screen name="main" component={MainScreen} />
      </Drawer.Navigator>
    </>
  )
}

【讨论】:

  • 但是把这段代码放在哪里呢?我不想在我的每个屏幕组件中复制粘贴&lt;StatusBar ...&gt; 代码。我试过你的代码,我收到错误Couldn't find a drawer. Is your component inside a drawer navigator? 显然你的代码在抽屉导航器之外。
  • 我也试过把状态栏的代码放在MyDrawer组件里,对状态栏没有任何影响。
  • 没想到那个 MB。您可以尝试将钩子和状态栏包装在某种屏幕组件中,然后在不同的屏幕中使用它?
  • 我已经用我的新想法更新了我的答案
  • 谢谢,但是就像我在之前的评论中所说的那样,我不想将相同的代码复制粘贴到我的每个屏幕上,我正在寻找比这更好的解决方案。