在调用/共享热点时,React本机检测IOS状态栏高度?

Sta*_*nko 3 react-native-ios

在ios和重叠视图上调用或共享个人热点时状态栏高度是否发生变化,如何在状态栏高度发生变化时检测状态栏高度?

Sta*_*nko 7

我遇到了这个挑战,并没有找到stackoverflow/github问题的答案.

我已经提出了自己的解决方案,并将其发布,这样可以为其他人节省一些时间.

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

componentDidMount () {
  if (Platform.OS === 'ios') {
    StatusBarManager.getHeight(response =>
        this.setState({statusBarHeight: response.height})
    )

    this.listener = StatusBarIOS.addListener('statusBarFrameWillChange',
      (statusBarData) =>
        this.setState({statusBarHeight: statusBarData.frame.height})
    )
  }
}

componentWillUnmount () {
  if (Platform.OS === 'ios' && this.listener) {
    this.listener.remove()
  }
}
Run Code Online (Sandbox Code Playgroud)

这个怎么运作

1)获取初始高度,注意它是异步方法

StatusBarManager.getHeight(response =>
    this.setState({statusBarHeight: response.height}))
Run Code Online (Sandbox Code Playgroud)

2)设置监听器以更改状态栏

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

3)删除componentWillUnmount中的监听器

if (Platform.OS === 'ios' && this.listener) {
  this.listener.remove()
}
Run Code Online (Sandbox Code Playgroud)


Pra*_*rma 6

您可以使用react-native-status-bar-height库来获取状态栏的高度,并且可以使用像

marginTop: getStatusBarHeight()

或者您可以用作 StatusBar 的高度,如果它设置为半透明。

如果您使用的是世博会

那么就 import { Constants } from 'expo'

和高度将是 Constants.statusBarHeight

请参阅此处此处的参考资料以了解世博会