反应原生不重叠状态栏

Posted

技术标签:

【中文标题】反应原生不重叠状态栏【英文标题】:React native not overlapping statusbar 【发布时间】:2018-01-13 04:30:41 【问题描述】:

我正在学习 React Native,但我不明白如何让所有内容不与状态栏重叠。

I have tried
translucent=true/flase
hidden

【问题讨论】:

请编辑您的问题以插入实际图片,而不是在其他地方插入图片链接。 @Frank Fajardo *** 不允许我这样做:/ 请看how to upload an image to a post @FrankFajardo 需要 10 声望! 【参考方案1】:

这是预期行为,一种解决方案是在顶层视图中添加与状态栏当前高度相等的填充,或者使用与状态栏高度相同的StatusBarView

参考这个插件https://github.com/jgkim/react-native-status-bar-size监听状态栏高度变化。

例如

import _ from 'lodash';
import React,  Component  from 'react';
import  View, StatusBar from 'react-native';
import StatusBarSizeios from 'react-native-status-bar-size';

const STATUS_BAR_EXTRA_PADDING = 2;
const DEFAULT_STATUS_BAR_HEIGHT = 10;

class StatusBarView extends Component 
  state =  
    statusBarHeight: _.get(StatusBarSizeIOS, 'currentHeight', DEFAULT_STATUS_BAR_HEIGHT);
    

  _handleStatusBarSizeDidChange = (statusBarHeight) => this.setState( statusBarHeight )

  componentDidMount() 
    StatusBarSizeIOS.addEventListener('didChange', this._handleStatusBarSizeDidChange);
  

  render() 
    return (
      <View
        style=
          height: this.state.statusBarHeight + STATUS_BAR_EXTRA_PADDING,
        
      >
        <StatusBar ...this.props />
      </View>
    );
  


export default StatusBarView;

现在你可以在你的屏幕中做类似的事情

import StatusBarView from 'view_path';
...
render() 
  return (
    <View>
       <StatusBarView barStyle="default" />
       <View>rest of the view</View>
    </View>
  );

【讨论】:

以上是关于反应原生不重叠状态栏的主要内容,如果未能解决你的问题,请参考以下文章

修复了 PhoneGap 中 iOS 状态栏重叠但状态栏不显示的问题

状态栏重叠

UISearchController 与状态栏重叠并且不填充 iPhone X

如何使用 Top Navigator 和 Bottom Navigator 而不让 Top Navigator 与 React Navigation 中的状态栏重叠?

UISearchBar 与 iOS 中的状态栏重叠

Android:工具栏状态栏重叠