【问题标题】:Android Navigation Bar height React-NativeAndroid 导航栏高度 React-Native
【发布时间】:2018-02-17 23:21:05
【问题描述】:

我正在尝试使用 RN 使 Android 底部栏(您有后退按钮的栏)高度正常工作。我做了以下事情:

Dimensions.get('window').height

我得到这个酒吧的高度!由于它可以存在或不存在,并且根据设置可以更大或更大,这对我来说是一个大问题。

【问题讨论】:

标签: react-native


【解决方案1】:
  • 在 iOS 设备中,screenHeight === windowHeight
  • 在带有底部导航栏的 Android 设备中,screen height === windowHeight + statusBarHeight + bottomNavigatorBarHeight ;
  • 在没有底部导航栏的 Android 设备中,bottomNavigatorBarHeight 为零。
import {Dimensions, StatusBar} from 'react-native'; 

const SCREEN_HEIGHT = Dimensions.get('screen').height; // device height
const STATUS_BAR_HEIGHT = StatusBar.currentHeight || 24; 
const WINDOW_HEIGHT = Dimensions.get('window').height;

【讨论】:

  • 我发现它在 Android 上似乎略有不同。较新版本的 Android 这似乎是正确的,旧版本 windowHeight 似乎也包括 statusBarHeight - 这很令人困惑。
  • 嗨,您介意分享更多细节吗?您使用哪个版本和设备型号?
  • 使用基本公式设置最小 CSS 高度 Dimensions.get('window').height - HEADER_HEIGHT - FOOTER_HEIGHT(其中 HEADER_HEIGHT = 400,FOOTER_HEIGHT = 200)这是较新设备(例如诺基亚 8.1 和 OnePlus6T)上屏幕高度的 100%电话)。在我使用的所有模拟器和 Galaxy S6 上,我还需要减去 statusBarHeight 以使其恰好为 100%
  • 仅供参考,statusBarHeight 不再存在于 react-native 的 StatusBar 上,您需要使用 StatusBar.currentHeight
【解决方案2】:

我使用下面的表格来做到这一点:

// RN version:0.57.0
let deviceH = Dimensions.get('screen').height;
// the value returned does not include the bottom navigation bar, I am not sure why yours does.
let windowH = Dimensions.get('window').height;
let bottomNavBarH = deviceH - windowH;

【讨论】:

  • 我认为这种方法的问题是它也会考虑状态栏的高度。例如,我打开了手势导航,因此没有显示导航栏,但状态栏仍然返回 25 的高度。
【解决方案3】:
import { Dimensions , StatusBar } from 'react-native';

const screenHeight = Dimensions.get('screen').height;
const windowHeight = Dimensions.get('window').height;
const navbarHeight = screenHeight - windowHeight + StatusBar.currentHeight;

【讨论】:

  • 对我来说,这报告的高度与栏在隐藏时可见的高度相同?
【解决方案4】:

首先我们需要导入

import { Dimensions , StatusBar } from 'react-native';

WindowHeight = Dimensions.get('window').height屏幕高度 = Dimensions.get('screen').heightStatusBarHeight = StatusBar.currentHeight

WindowHeight = ScreenHeight - NavigationBarHeight

当我们想在页面底部实现浮动按钮时,将 WindowHeight 设置为该高度并设置 bottom : StatusBar.currentHeight 为子元素。

当我们没有 NavigationBar时, WindowHeight = ScreenHeight

【讨论】:

    【解决方案5】:

    首先在其他答案中提到,在 Android 中使用 react native Dimensions API,窗口高度 = 屏幕高度 -(状态栏高度 + 导航栏高度)

    经过几个小时的调查,我发现在一些 Android 设备中,Dimensions API 给出了错误的窗口高度数。

    解决方案是使用 [react-native-extra-dimensions-android][1]

    [1]:https://github.com/Sunhat/react-native-extra-dimensions-android 它为您提供以下信息:

    REAL_WINDOW_HEIGHT - 屏幕的实际高度,包括系统装饰元素 REAL_WINDOW_WIDTH - 屏幕的实际宽度,包括系统装饰元素 STATUS_BAR_HEIGHT - 状态栏的高度 SOFT_MENU_BAR_HEIGHT - 软菜单栏的高度(大多数新的 Android 设备都支持)

    然后你可以计算窗口高度:REAL_WINDOW_HEIGHT -(STATUS_BAR_HEIGHT + SOFT_MENU_BAR_HEIGHT)

    【讨论】:

      【解决方案6】:

      对我来说这很有效

      import { Dimensions} from "react-native";
            const screenHeight = Dimensions.get('screen').height;
            const windowHeight = Dimensions.get('window').height;
            const navbarHeight = screenHeight - windowHeight
      

      【讨论】:

        【解决方案7】:

        如果您指的是顶部的状态栏。

        根据react native docs可以使用

        import { StatusBar } from 'react-native';
        

        然后在你的代码中

        StatusBar.currentHeight
        

        更新

        你可以使用这个模块react-native-extra-dimensions-android得到这个

        要检测是否存在soft android nav,你可以使用这个模块react-native-detect-navbar-android

        【讨论】:

        • OP 是在谈论带有返回和主页按钮的屏幕导航栏,而不是状态栏。
        • 谢谢!有没有办法知道它是否存在?
        • 是的,你可以使用这个react-native-detect-navbar-android
        • 这似乎可以解决问题。我还没有时间完全检查出来,尤其是在没有酒吧的时候。现在它会做!非常感谢!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-19
        • 1970-01-01
        相关资源
        最近更新 更多