如何通过React Native在Android中找到状态栏的高度?

Zoh*_*vin 40 android statusbar react-native

如何通过React Native在Android上找到状态栏的高度?

如果我检查React.Dimensions高度,值似乎也包括状态栏高度,但我试图找到没有状态栏的布局高度.

Ijz*_*ein 69

你不需要任何插件(只需使用)StatusBar.currentHeight:

import {StatusBar} from 'react-native';
console.log('statusBarHeight: ', StatusBar.currentHeight);
Run Code Online (Sandbox Code Playgroud)

编辑:显然这似乎总是在Android上工作,但在iOS上,最初undefined确实返回:(

  • 我得到了未定义的回报 (4认同)
  • RN v0.64:仍然仅适用于 Android。 (4认同)
  • 根据文档,它目前(0.49)仅适用于 android (2认同)

jmu*_*rzy 24

不幸的是,从v0.34开始,执行此操作的API在各个平台上仍然不一致.StatusBarManager.HEIGHT将为您提供Android上状态栏的当前高度.

import { Platform, NativeModules } from 'react-native';
const { StatusBarManager } = NativeModules;

const STATUSBAR_HEIGHT = Platform.OS === 'ios' ? 20 : StatusBarManager.HEIGHT;
Run Code Online (Sandbox Code Playgroud)

在iOS上,您可以使用 getHeight()

StatusBarManager.getHeight((statusBarHeight)=>{
  console.log(statusBarHeight)
})
Run Code Online (Sandbox Code Playgroud)

作为旁注,如果您希望您的应用在Android上的状态栏下绘制,类似于默认的iOS行为,您可以通过<StatusBar>如下设置几个道具来实现:

<StatusBar translucent={true} backgroundColor={'transparent'} {...props} />   
Run Code Online (Sandbox Code Playgroud)


dbl*_*ski 14

你可以使用这个辅助函数来获取 iOS 和 Android 上的状态栏高度。对于 iOS,当 >= iPhone X(带缺口)使用时,计算得到不同的 StatusBar 高度。

// functions-file.js
import { Dimensions, Platform, StatusBar } from 'react-native';

const X_WIDTH = 375;
const X_HEIGHT = 812;

const XSMAX_WIDTH = 414;
const XSMAX_HEIGHT = 896;

const { height, width } = Dimensions.get('window');

export const isIPhoneX = () => Platform.OS === 'ios' && !Platform.isPad && !Platform.isTVOS
    ? width === X_WIDTH && height === X_HEIGHT || width === XSMAX_WIDTH && height === XSMAX_HEIGHT
    : false;

export const StatusBarHeight = Platform.select({
    ios: isIPhoneX() ? 44 : 20,
    android: StatusBar.currentHeight,
    default: 0
})
Run Code Online (Sandbox Code Playgroud)

然后导入的时候直接使用:

import { StatusBarHeight } from './functions-file.js'

height: StatusBarHeight 
Run Code Online (Sandbox Code Playgroud)

如果您使用另一个选项react-navigation-stack- 它通过钩子提供标题高度 - https://reactnavigation.org/docs/en/stack-navigator.html#headertransparent

import { useHeaderHeight } from 'react-navigation-stack';

// ...

const headerHeight = useHeaderHeight();
Run Code Online (Sandbox Code Playgroud)


Oma*_*ork 8

导入常量尺寸

import Constants from 'expo-constants';
import Dimensions  from 'react-native';
Run Code Online (Sandbox Code Playgroud)

在样式表容器中 hight - 状态栏 hight = 无状态 hight

 container: {   height: Dimensions.get('window').height - Constants.statusBarHeight,}
Run Code Online (Sandbox Code Playgroud)

  • 如果您不使用 Expo 怎么办? (3认同)

Fré*_*Wat 6

import {NativeModules} from 'react-native';

// ...

const {StatusBarManager} = NativeModules;

const height = StatusBarManager.HEIGHT;
Run Code Online (Sandbox Code Playgroud)

  • 通过添加更多有关代码的作用以及它如何帮助操作员的信息,可以改进您的答案。 (2认同)

Han*_*ney 5

您可以通过以下方式获取状态栏的高度

  import { useSafeAreaInsets } from 'react-native-safe-area-context'

  const insets = useSafeAreaInsets()

  console.log('height of status bar', insets.top)
Run Code Online (Sandbox Code Playgroud)