react-native - 0.62.x 中维度的 React Native 状态栏事件
问题描述
StatusBarIOS 有一个方法addListener
可以让我们监听状态栏高度的变化,如下所示:
StatusBarIOS.addListener('statusBarFrameWillChange', (statusBarData) => {
this.setState({statusBarHeight: statusBarData.frame.height});
});
StatusBarIOS 已弃用,并提示代码已合并到 StatusBar
我们如何监听statusBarFrameWillChange
事件?
解决方案
您可以使用该NativeEventEmitter
模块,这是一个使用模块获取状态栏高度的反应钩子的示例。
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;
}
此代码段还使用 StatusBarManager 来获取初始高度。
推荐阅读
- excel - 收到错误 1004:我们可以对合并的单元格执行此操作.. 为什么?
- angular - 带有选项参数的路由?和 &
- django - 将 RTF/富文本编辑器添加到 CustomUserCreationForm/CustomUserEditForm
- javascript - 从 React 中的 ref 回调中读取 getBoundingClientRect 值
- javascript - 如何在reactjs中聚焦div元素并停止默认滚动
- javascript - 返回函数的函数 - ?
- node.js - 自定义操作 Bot 框架
- amazon-web-services - S3 上托管的单个 Angular 6 项目中两个不同域的两个不同模块
- c# - SonarQube 异常与 ubuntu 上的 .net 框架应用程序
- c - C中三重指针的目的