uni-app:iPhone的底部安全区域

8,666 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

css中的处理

    项目开发中,基于ios的H5、小程序、APP都不得不考虑的就是iPhone的底部黑条了,手机端都会有tabbar底部菜单,如果不针对底部的安全区域做出处理的话,贴底会被底部黑条遮挡,直接空出一部分的空间的话,又会因为不同的型号而产生不同的底部安全区域高度,所以就需要一个合适的处理方法了。

    如果只是需要空出这一部分的区域的话,那么通过uni-app自带的处理方法在css中加入指定的代码即可完成处理

page{ 
  padding-bottom: constant(safe-area-inset-bottom); 
  padding-bottom: env(safe-area-inset-bottom); 
}

如上配置之后,框架会自动识别设备型号,并配置对应的安全区域高度,无安全区域时为0,不用担心破版。

获取安全区域高度

    上述做法只能被动的接受框架的处理,而有时需要拿到实际的安全区域高度方便动态高度的处理。

    如,某个H5界面包含头部、内容区、tabbar三个部分,中间内容区高度由内容撑高,如果不能完全撑高则动态高度,超过屏幕高度则允许滚动。

    这时,如果需要计算中间的高度,头部和tabbar是自定义的,固定高度可以直接用于计算,但是是否包含安全区域,安全区域的高度是未知的,所以需要实时获取。

uni.getSysteminfo({
  success: res => {
    let safeArea = res.safeAreaInsets.bottom;
  }
})

该APi返回一个对象,包含 top right bottom left width height,其中bottom为安全区域高度

对应的兼容情况如下,uni-app的版本2.5.3+使用safeAreaInsets值

safeArea在竖屏正方向下的安全区域App、H5、微信小程序
safeAreaInsets在竖屏正方向下的安全区域插入位置(2.5.3+)App、H5、微信小程序