小程序中获取屏幕高度及iPhoneX适配问题

屏幕高度问题

小程序中有时候需要获取屏幕高度使用,简单的通过wx.getSystemInfo即可获取到手机的系统信息

wx.getSystemInfo中有3个高度,分别是:

screenHeight:屏幕高度

windowHeight:窗口高度

statusBarHeight:状态栏高度

 

对于小程序来说屏幕的高度 = 状态栏高度 + 导航栏高度 + 窗口高度 + 标签栏高度,如下图所示:

所以我们想要获取窗口可使用高度时,在含有tabbar标签栏的页面中可以直接通过wx.getSystemInfo获取windowHeight来使用,使用方法:

app.js

App({
  onLaunch: function() { 
    // 获取屏幕高度
    wx.getSystemInfo({
      success: function(res) {
        that.globalData.windowHeight = res.windowHeight
      }
    })
},
globalData: {
    windowHeight: null,
  }
})

index.js 

 Page({
     data: {
        windowHeight: app.globalData.windowHeight,
     },
 })

index.wxml

<scroll-view scroll-y style='height:{{windowHeight}}px;'>

在不含有tabbar标签栏的页面中屏幕可使用高度的获取有两种方式

1、windowHeight窗口高度 + tabbar标签栏高度

2、screenHeight屏幕高度 -  statusBarHeight状态栏高度 - 导航栏高度

iPhoneX 适配问题

我们这里先简单总结一下 iPhone X 屏幕的基础数据,方便后续在小程序开发中进行适配。

  • 屏幕尺寸:5.8 英寸(对角线)

  • 屏幕物理分辨率:1125px × 2436px,458 ppi

  • 实际开发适配尺寸:375pt × 812pt,@3x

此外,由于在 iPhone X 屏幕顶部状态栏区域有“齐刘海”,以及在屏幕底部增加了“操作条”,如下图所示,因此,我们在开发中需要注意安全区域的问题。

在小程序页面开发中,涉及到需要适配 iPhone X 的地方主要有:导航栏(NavigationBar),标签栏(TabBar)以及页面底部的吸底按钮。

相对于iPhone6来说,iPhoneX的导航栏高度并没有改变,依然是88px,增加的是statusBarHeight状态栏高度,

  iPhone6:

iPhoneX:

而底部吸盘的高度不好确定,所以在不含有tabbar标签栏的页面中屏幕可使用高度的获取就用第二种方式较好

屏幕可使用高度 = screenHeight屏幕高度 -  statusBarHeight状态栏高度 - 导航栏高度

 

但小程序官方的tabbar是给底部吸盘预留了空间了,所以可以根据开发者的具体情况决定是否获取全部可使用高度

 

<think>好的,我现在需要解决用户的问题:如何在微信小程序获取不同机型的状态栏高度。用户希望了解相关的API文档或示例代码。首先,我需要回忆一下微信小程序的API,特别是关于系统信息的部分。 记得之前学过微信小程序有几个获取系统信息的API,比如wx.getSystemInfo和wx.getSystemInfoSync。用户提到需要异步获取,但根据引用[5],wx.getSystemInfo虽然是异步调用,但同步返回,而wx.getSystemInfoAsync是异步的。不过可能需要确认最新的文档,因为有时API会有更新。 用户想要获取所有机型的状态栏高度,状态栏高度通常包含在系统信息中。所以应该使用这些API来获取statusBarHeight字段。接下来,需要确定如何正确调用这些API,并处理同步和异步的情况。 根据引用[5],如果用户需要异步获取,应该使用wx.getSystemInfoAsync,但可能旧版本不支持这个,所以需要检查兼容性。不过一般情况下,wx.getSystemInfoSync是同步获取,更直接,适合在页面加载时立即获取数据,比如在页面的onLoad生命周期中。 然后,考虑代码示例。用户可能需要一个简单的例子,展示如何调用API并获取statusBarHeight。比如使用同步方法: const systemInfo = wx.getSystemInfoSync(); const statusBarHeight = systemInfo.statusBarHeight; 或者在异步情况下: wx.getSystemInfoAsync({ success(res) { console.log(res.statusBarHeight); } }); 不过根据引用[5],wx.getSystemInfo虽然是异步调用,但实际上是同步返回的,可能需要注意这一点,避免混淆。 另外,还需要提醒用户注意不同机型的适配问题。比如在CSS中使用rpx单位来适配不同屏幕,或者在WXML中使用状态栏高度作为内联样式,确保布局正确。引用[4]中提到使用rpx来处理分辨率问题,这可能对布局有帮助。 最后,要确保用户知道如何将这些高度应用到实际页面中,比如设置padding-top为状态栏高度,避免内容被状态栏遮挡。例如,在页面的JSON配置中设置导航栏样式,或者动态设置样式。 总结步骤:1. 使用wx.getSystemInfoSync获取系统信息;2. 提取statusBarHeight字段;3. 将高度应用到页面布局中。同时提供同步和异步的代码示例,并提醒兼容性和适配问题。</think>在微信小程序获取状态栏高度可以通过以下两种API实现: ### 一、同步获取方式(推荐) 使用`wx.getSystemInfoSync()`同步API直接获取状态栏高度: ```javascript // 在页面js文件中 Page({ onLoad() { const systemInfo = wx.getSystemInfoSync() const statusBarHeight = systemInfo.statusBarHeight this.setData({ statusBarHeight }) console.log('状态栏高度:', statusBarHeight + 'px') } }) ``` ### 二、异步获取方式 使用`wx.getSystemInfo`异步API获取(注意该API是异步调用但同步返回[^5]): ```javascript wx.getSystemInfo({ success(res) { console.log('状态栏高度:', res.statusBarHeight) } }) ``` ### 三、应用场景示例 在WXML中动态设置布局: ```html <view style="padding-top: {{statusBarHeight}}px"> <!-- 页面内容 --> </view> ``` ### 四、技术要点 1. 返回值单位为**物理像素px** 2. 状态栏高度包含在系统信息返回值中 3. 建议在页面`onLoad`生命周期获取数据 4. 不同机型返回值范围参考: - iPhone X系列:44px - 普通安卓机:24-25px - 特殊机型:可能达到48px ### 五、官方文档 详细参数说明请参考微信官方文档: [开发文档 > 设备 > wx.getSystemInfoSync](https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getSystemInfoSync.html)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值