对 0.62.x 中的维度响应本机状态栏事件

wiz*_*bin 2 react-native

StatusBarIOS 有一个方法addListener可以让我们监听状态栏高度的变化,如下所示:

StatusBarIOS.addListener('statusBarFrameWillChange', (statusBarData) => {
  this.setState({statusBarHeight: statusBarData.frame.height});
});
Run Code Online (Sandbox Code Playgroud)

StatusBarIOS 已弃用,并显示代码已合并到 StatusBar 的消息

在此输入图像描述

我们如何收听该statusBarFrameWillChange事件?

wiz*_*bin 5

您可以使用该NativeEventEmitter模块,这是一个使用该模块获取状态栏高度的react hook的示例。

import React, { useState, useEffect } from 'react';
import { NativeEventEmitter, NativeModules } from 'react-native';

const { StatusBarManager } = NativeModules;

export default function useStatusBarHeight() {
  const [value, setValue] = useState();

  useEffect(() => {
    const emitter = new NativeEventEmitter(StatusBarManager);
    StatusBarManager.getHeight((statusBarFrameData) => setValue(statusBarFrameData.height));
    const listener = emitter.addListener('statusBarFrameWillChange', (data) => setValue(data.frame.height));

    return () => listener.remove();
  }, []);

  return value;
}
Run Code Online (Sandbox Code Playgroud)

此代码片段还使用 StatusBarManager 来获取初始高度。