微信小程序自定义导航栏机型适配--底部Tabbar--view高度--底部按钮适配

简介: 微信小程序自定义导航栏机型适配--底部Tabbar--view高度--底部按钮适配

自定义微信小程序头部导航栏

自定义微信小程序头部导航栏,有几种方式

方式一

{
  "navigationStyle": "custom" // 将navigationStyle从默认default改为custom
}

定义此方法后,头部的导航栏会去掉,导航栏下的元素会直接向上移动到原导航栏的位置,可以再app.json配置成全局沉浸式导航栏,以及在单页面配置沉浸式导航栏。

方式二

使用组件

这里使用vant组件作为演示

组件配置的NavBar,样式在官方文档上有说明,根据文档说明修改样式即可。

官方文档:https://vant-contrib.gitee.io/vant-weapp/#/nav-bar

机型适配

由于自定义navBar了,导航栏下面的元素会直接向上偏移,需要离顶部的距离才可以恢复到正常的位置,此时设置的距离根据不同的机型,位置也会不同,所以这里就需要做到机型适配。

方式一:

根据微信小程序胶囊到顶部以及胶囊的高度,算出navBar下的内容到顶部的距离

// js
let pillHeight = wx.getMenuButtonBoundingClientRect().top  // 胶囊到顶部的高度
let pill = wx.getMenuButtonBoundingClientRect().height  // 胶囊的高度
this.setData({topHeight : pillHeight +pill })
// 页面   动态设置margin-top高度
 <view class="content_bg" style="margin-top: {{capsuleHeight}}px;">内容</view>

方式二:

根据小程序头部的高度加导航高度的距离动态计算内容到顶部的距离

// js
 wx.getSystemInfo({
        success: res => {
          let navWindowHeight = res.statusBarHeight + 46; // 小程序头部的高度 + 导航高度
          this.setData({capsuleHeight : navWindowHeight })  // 赋值高度
        }, fail(err) {
      console.log(err);
    }
// 页面
<view class="content_bg" style="margin-top: {{capsuleHeight }}px;">内容</view>

由于机型的不同,动态计算的高度也不同,不同机型对胶囊到顶部的高度都有差异,而且获取到的胶囊到顶部或者小程序头部的高度的值单位是 px ,所以直接将获取到的值赋值给距离顶部的距离即可,否则在动态计算高度的时候,px不会动态适配屏幕的大小变化,目前来说用方式二适配率高一些,在开发的时候需要根据实际情况,做不同的调整。


动态获取view的宽高

根据viewclassid名动态获取view的宽高信息

<view class="box"></view>
// 获取宽高信息
getNavInfo(){
   let that = this
   const query = wx.createSelectorQuery();
   query.select('.box').boundingClientRect(function (res) {
     console.log(res);
   }).exec()
},


动态获取底部Tabbar的高度

screenHeight :屏幕高度,单位px

safeArea.bottom:安全区域右下角纵坐标

官方文档已有说明:https://developers.weixin.qq.com/miniprogram/dev/api/base/system/wx.getSystemInfo.html

wx.getSystemInfo({
      success: (res) => {
        this.setData({
          tabBarHeight : res.screenHeight - res.safeArea.bottom + 50
        })
      }
    })

将计算出来的tabBatHeight直接写在页面的行内样式中即可


底部按钮的适配

由于用户的机型不同,微信小程序底部的高度计算规则也不同,现在的机型分为两种,一种是安卓机,一种是ios机型,安卓机的适配在开发者工具上的预览机型相当于iphone5,而ios机型在开发者工具上的预览相当与iphone12或以上,这其实只是一个预估值,可以将它统称为iphoneX,导致机型不适配的原因是因为苹果 iPhoneX 、iPhone XR等设备上,物理Home键被取消,改为底部小黑条替代home键功能。

在安卓机型上是直接忽略掉该小黑条的,而iPhoneX及以上设备则会计算该小黑条的高度,这就导致一套css方案在不同的机型上会有适配问题,解决适配问题的方案可以使用苹果官方提供的css样式:

padding-bottom: constant(safe-area-inset-bottom); /*兼容 IOS<11.2*/
padding-bottom: env(safe-area-inset-bottom); /*兼容 IOS>11.2*/

该样式可以兼容iPhone设备的底部高度,但是安卓机型并不兼容,所以需要在给底部的高度再加一个padding-bottom:10rpx;让底部的按钮撑起一个安全距离。下面是完整的代码示例:

<view class="baseBottom">
   <view class="bottomCase">提交</view>
   <view class="isIPhoneXRegexBottom"></view>
</view>
.outStore{
  position: fixed;  /* 固定在底部 */
  bottom: 0;
  left: 0;
  width: 100vw;
  background-color: white;
  .bottomCase{
    width: calc(100% - 52rpx);
    height: 76rpx;
    margin: 0 auto;
    margin-top: 12rpx;
    text-align: center;
    line-height:76rpx
    margin-bottom: 10rpx; /* 10px适配安卓机型 */
  }
}
/* 安全距离-全局的style文件,在页面直接调用即可 */
.isIPhoneXRegexBottom {
  padding-bottom: constant(safe-area-inset-bottom) !important;   /*兼容 IOS<11.2*/
  padding-bottom: env(safe-area-inset-bottom) !important;  /*兼容 IOS>11.2*/
  background-color: transparent;  /* 透明色 */
}

原理就是在底部按钮下方设置一个view块,该块会自动适配iPhone机型,将按钮上方顶住,以保持安全距离。由于苹果官方提供的方法安卓机型不适配,所以需要只用marginpadding来将底部按钮撑起一个安全高度。

在不同机型下的效果:

iPhone机型

安卓机型:

目录
相关文章
|
4月前
|
小程序
微信小程序动态tabBar实现:基于自定义组件,灵活支持不同用户角色与超过5个tab自由组合(更新版)
微信小程序动态tabBar实现:基于自定义组件,灵活支持不同用户角色与超过5个tab自由组合(更新版)
856 1
|
4月前
|
小程序 搜索推荐 API
微信小程序:自定义关注公众号组件样式
尽管关注公众号组件的样式固定且不可修改,但产品经理的需求却需要个性化的定制。在这种情况下,我们需要寻找解决方案,以满足这些特殊需求,尽管这可能有点棘手。
134 0
微信小程序:自定义关注公众号组件样式
|
6月前
|
小程序 开发者
Taro@3.x+Vue@3.x+TS开发微信小程序,使用自定义tabBar
本文介绍了如何在Taro项目中实现自定义tabBar。首先,在`app.config.ts`中设置`custom: true`并配置`tabBar`。
241 0
Taro@3.x+Vue@3.x+TS开发微信小程序,使用自定义tabBar
|
5月前
|
小程序 前端开发 生物认证
微信小程序如何将一个按钮放到页面的最底下?
微信小程序如何将一个按钮放到页面的最底下?
657 5
|
6月前
|
Linux 网络安全 API
企业微信自定义应用 企业可信IP配置 企业可信ip怎么设置
企业微信自定义应用 企业可信IP配置 企业可信ip怎么设置
|
6月前
|
小程序 前端开发 API
微信小程序全栈开发中的多端适配与响应式布局是一种高效的开发模式。
探讨小程序全栈开发中的多端适配与响应式布局,旨在实现统一的用户体验。多端适配包括平台和设备适配,确保小程序能在不同环境稳定运行。响应式布局利用媒体查询和弹性布局技术,使界面适应各种屏幕尺寸。实践中需考虑兼容性、性能优化及用户体验,借助跨平台框架如Taro或uni-app可简化开发流程,提升效率。
95 1
|
7月前
|
小程序 前端开发
【微信小程序-原生开发】添加自定义图标(以使用阿里图标库为例)
【微信小程序-原生开发】添加自定义图标(以使用阿里图标库为例)
304 0
|
7天前
|
人工智能 开发框架 机器人
AstrBot:轻松将大模型接入QQ、微信等消息平台,打造多功能AI聊天机器人的开发框架,附详细教程
AstrBot 是一个开源的多平台聊天机器人及开发框架,支持多种大语言模型和消息平台,具备多轮对话、语音转文字等功能。
2040 13
AstrBot:轻松将大模型接入QQ、微信等消息平台,打造多功能AI聊天机器人的开发框架,附详细教程
|
4月前
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
967 7
|
4月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
922 1

热门文章

最新文章