收藏
回答

wx.getSystemInfo 获取的 safeArea 在安卓非异形屏中的值不正确?

通过 wx.getSystemInfo() 可以获得 safeArea,在 iPhone X,一加6 等异形屏手机中,获得的数值是正确的。

在 iPhone 6 这种正常屏幕中的数据也是正确的。

safeArea: {
  bottom: 667,
  height: 647,
  left: 0,
  right: 375,
  top: 20,
  width: 375
}


但是在正常屏幕的安卓手机中会忽略最上方的状态栏,比如在华为 Mate9 中,获得的数据是这样的:

safeArea: {
  bottom: 658,
  height: 658,
  left: 0,
  right: 393,
  top: 0,
  width: 393
}


注意这里的 top 的值是 0,而 iPhone 中的 safeArea.top 是 20,也就是说在安卓中最上方的状态栏的高度被忽略了。

另外,在模拟器中,使用 nexus 获取的 safeArea.top 也是 20,而不是 0。

所以这种情况是 bug,还是这就是正确结果?





20190920 22:55 更新:

目前使用 wx.getSystemInfo() statusBarHeight 来代替 safeArea.top 进行计算

最后一次编辑于  2019-09-20
回答关注问题邀请回答
收藏

3 个回答

  • 龘龘龘龘
    龘龘龘龘
    01-23

    救大命了

    01-23
    有用
    回复
  • !!!Σ(っ°Д°;)っ
    !!!Σ(っ°Д°;)っ
    2019-09-20

    安卓最上面的状态栏无法显示App的内容,所以肯定是0啊,iOS全屏的话,状态栏部分是可以显示App内容的,所以是有数值的。

    2019-09-20
    有用
    回复 4
    • Miaonster
      Miaonster
      2019-09-20
      是可以的,navigationStyle: 'custom' 可以自定义导航栏
      2019-09-20
      回复
    • !!!Σ(っ°Д°;)っ
      !!!Σ(っ°Д°;)っ
      2019-09-22回复Miaonster
      你可能搞错了一件事儿,顶部状态栏的高度是statusBarHeight来表示的,官方文档中也明确的说明了
      2019-09-22
      回复
    • Miaonster
      Miaonster
      2019-09-23回复!!!Σ(っ°Д°;)っ
      这就是问题所在了,状态栏是否算在 safe area 里呢?现在的情况是在非异形屏中,iOS 的 safe area 包含 status bar,而安卓的不包括,我觉得各个设备应该要表现得一致。如果不一致又是按照什么标准划分的?
      2019-09-23
      回复
    • !!!Σ(っ°Д°;)っ
      !!!Σ(っ°Д°;)っ
      2019-09-23回复Miaonster
      这就不清楚了,safe area的概念是iOS中最先提出来的,可能安卓机型能没有适配到吧
      2019-09-23
      回复
  • 是小白啊
    是小白啊
    2019-09-20

    截图看下?微信版本是多少?

    2019-09-20
    有用
    回复 1
    • Miaonster
      Miaonster
      2019-09-20
      在帖子更新截图了,微信版本 7.0.6
      2019-09-20
      回复
登录 后发表内容
问题标签