反应本机状态栏不适用于android中的反应导航

Posted

技术标签:

【中文标题】反应本机状态栏不适用于android中的反应导航【英文标题】:React native statusbar not working with react-navigation in android 【发布时间】:2018-10-03 10:04:16 【问题描述】:

版本:

   "native-base": "^2.4.2",
    "react": "16.3.1",
    "react-native": "0.55.2",
    "react-native-global-font": "^1.0.1",
    "react-native-router-flux": "^4.0.0-beta.28",
    "react-navigation": "^1.5.11"

当我添加 react-navigation 时,我无法更改状态栏颜色,我的状态栏变成蓝色。

这是我的 Navigationview.js 代码

    render() 
          return (
            <Root style=styles.container>
                <StatusBar
                  backgroundColor="white"
                  barStyle="dark-content"
                />
                <MainView />
            </Root>
          );
        

    const drawerHeader = (props) => (
  <Container style=styles.container>
    <Header style=styles.header>
      <Body style=styles.body>
        <Icon name="person" style= fontSize: 40, color: '#CCCCCC'  />
      </Body>
    </Header>
    <Content>
    <SafeAreaView forceInset= top: 'always', horizontal: 'never' >
        <DrawerItems ...props />
        <Button title="Logout" onPress=() => Actions.reset('login') />
    </SafeAreaView>
    </Content>
  </Container>
);

    const MainView = DrawerNavigator(
      DASHBOARD: 
        screen: Dashboard,
      ,
      LOGOUT: 
        screen: LoginForm,
      
    , 
        initialRouteName: 'DASHBOARD',
        contentComponent: drawerHeader,
        drawerOpenRoute: 'DrawerOpen',
        drawerCloseRoute: 'DrawerClose',
        drawerToogleRoute: 'DrawerToogle'
    );

i even set statusbar color in Dashboard screen, still not change.

Dashboard.js

    <Container>
            <Header androidStatusBarColor="#FFF" style=backgroundColor:'#000'>
              <StatusBar
                  backgroundColor="white"
                  barStyle="dark-content"
                />
              <Body>
                <Title style=color:'#FFF'>My App</Title>
              </Body>
            </Header>
            <Content>
              //content of your app goes here
            </Content>
          </Container>
I m also using native-base, so i add this code in my App.js file

    render() 
        return (
          <Root style=styles.container>
              <StatusBar
                backgroundColor="white"
                barStyle="dark-content"
              />
              this.spinerRender()
          </Root>
        );
      

这适用于我的登录和登录屏幕,但不适用于我的导航视图屏幕。

登录和登录屏幕状态栏

导航屏幕状态栏

【问题讨论】:

你使用世博会吗? @aLIEz no i m not using expo. 尝试将其包装在视图中并在根容器中添加一些高度,如提到的here ParentWrapper 是从哪里派生出来的? @NabeelK 是的,问题是原生组件。我更改了 contentComponent 视图。问题解决了。 【参考方案1】:

现在修复了。

问题,是本机基础组件,所以我将 contentComponent 视图更改为此。

<SafeAreaView style=flex: 1> 
<View style=styles.container> 
   <StatusBar backgroundColor='red' barStyle='dark-content' translucent=false /> 
.... 
</SafeAreaView>

【讨论】:

【参考方案2】:

我的问题略有不同。

我导航的上一个屏幕已将 StatusBar hidden 设置为 true。

// previous screen that I navigated from
<StatusBar hidden animated /> 

所以我必须在新屏幕上将 StatusBar hidden 显式更改为 falseanimatedtrue

// new screen needs hidden=false to show up
<StatusBar hidden=false animated />

【讨论】:

【参考方案3】:

对于任何使用 native-base Header 并遇到此问题的人,您可以使用 prop iosBarStyle,如下所示

    <Header
      iosBarStyle="dark-content"

【讨论】:

【参考方案4】:

对于任何使用 native-base Header 并遇到此问题的人,您可以使用 prop androidStatusBarColor,如下所示

<Header style=styles.header androidStatusBarColor="#f8bb12">

【讨论】:

【参考方案5】:

如果存在缺口,您可以这样做以排除缺口。

import React from "react";
import Text, SafeAreaView, StatusBar from "react-native";

export default function App() 
  return (
    <React.Fragment>
      <StatusBar hidden />
      <SafeAreaView> 
        <Text>Your Code</Text>
      </SafeAreaView>
    </React.Fragment>
  );

通过使用带隐藏的StatusBar可以排除***。

【讨论】:

以上是关于反应本机状态栏不适用于android中的反应导航的主要内容,如果未能解决你的问题,请参考以下文章

未设置反应本机状态栏背景颜色

是否可以在本机反应中绘制状态栏?

如何在本机反应中使状态栏透明?

如何在本机反应中获取设备令牌

反应本机 firebase 实时数据库参考返回 null

当应用程序处于后台状态(Android)时,远程推送通知提示无法在本机反应中工作