React Native Expo StackNavigator 重叠了通知栏

19

我试图为我的React Native Expo 应用程序实现导航栏。以下是一个问题:

在此输入图片描述

"dependencies": {
    "expo": "^18.0.3",
    "react": "16.0.0-alpha.12",
    "react-native": "^0.45.1",
    "react-navigation": "^1.0.0-beta.11"
}

我不知道在哪里以及如何设置这个组件的样式,使其不会与通知栏重叠。我尝试为我的根视图设置marginTop: StatusBar.currentHeight,但它没有起作用。它将留白应用于视图,而不是导航栏。

我的应用:

import {StackNavigator} from 'react-navigation';
import Home from './app/screens/Home';

export default App = StackNavigator({
  Home: { screen: Home }
})

首页:

export default class Home extends Component {
    constructor() {
        super();  
        // <...>
    }

    static navigationOptions = {
        title: 'Welcome'
    };

    // <...>
}
2个回答

41

如果你在一个带有顶部边距的View中包裹整个应用程序,它就能正常工作。

例如:https://snack.expo.io/r1gb9TGH-

将来,我们将把这个功能构建到 react-navigation 中,使其自动化。

import React, {Component} from 'react';
import {StatusBar, View} from 'react-native'
import {StackNavigator} from 'react-navigation';
import Home from './app/screens/Home';

const RootNavigator = StackNavigator({
  Home: { screen: Home }
})

export default class App extends Component {
  render() {
    return (
      <View style={{ flex: 1, marginTop: StatusBar.currentHeight }}>
        <RootNavigator />
      </View>
    )
  }
}

正是我所寻找的! - Andrei

3

将此行添加到app.json文件中

"translucent": false

"androidStatusBar"
就像这样:
"androidStatusBar": {
  "barStyle": "light-content",
  "backgroundColor": "#3a81fd",
  "hidden": false,
  "translucent": false
},

更多内容请参阅:配置 StatusBar 文档


这是最新版本的 Expo 的更好解决方案。 - maroof shittu
iOS 状态栏怎么样? - Roy Ryando

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接