微信小程序的导航栏主要分为两个部分:状态栏和标题栏。

关于微信小程序的自定义导航栏也就是通过微信小程序官方提供的API接口来算出状态栏和标题栏的高度。

注意获取到的数值单位都是px。
首先要开启自定义导航栏和知道两个API:

开启导航栏:在当前页面的json文件中设置 “navigationStyle”:“custom” ,开启自定义导航栏。具体看小程序官网页面配置,链接。
API接口:
wx.getSystemInfoSync() 和 wx.getMenuButtonBoundingClientRect(),接下来开始计算状态栏和标题栏的高度。

先推荐一个比较懒的方法,仿照Vant Weapp 的NavBar 导航栏组件

Vant Weapp的NavBar导航栏的做法是把标题栏的高度写死了46px(看vant的代码得出的结果,如果错误请忽略),这样写的话细节部分差2px的高度,ios端多出2px,安卓端小了2px,这是简便的方法。

html部分
<view><view style="width:750rpx;height:{{statusBarHeight}}px"></view><view class="title" style="width:750rpx;height:{{titleHeight}}px">123</view>
</view>
----------------------------
css样式
.title{display: flex;align-items: center;justify-content: center;
}
----------------------------
js部分,代码写在了onload生命周期const systemInfo = wx.getSystemInfoSync();// 状态栏高度 let statusBarHeight = systemInfo.statusBarHeight// 标题栏高度let titleHeight = 46this.setData({statusBarHeight:statusBarHeight,titleHeight:titleHeight})
状态栏的高度

根据wx.getSystemInfoSync() 接口的返回值可以得到 statusBarHeight属性,statusBarHeight:状态栏的高度,单位px。

const systemInfo = wx.getSystemInfoSync();// 状态栏高度
let statusBarHeight = systemInfo.statusBarHeight
标题栏的高度

根据wx.getSystemInfoSync()API返回的数据,screenHeight -windowHeight - statusBarHeight = 标题栏的高度。注意:在开启自定义导航栏后,screenHeight 和 windowHeight 的值相同,如需测试关闭自定义导航栏。
方法一: 如果小程序的第一个页面不是自定义导航页面,可以在 app.js的onLaunch方法中根据下列代码算出标题栏的高度,保存在globalData中,待自定义页面使用。(如果第一个页面不是自定义导航的话,推荐使用该方法)

let systemInfo = wx.getSystemInfoSync();// 标题栏高度
let titleHeight = systemInfo.screenHeight - systemInfo.windowHeight - systemInfo.statusBarHeight

方法二:

方法二是有点不确定的方法,但思路是对的。标题栏的高度= 胶囊的高度 + 高度一 + 高度二。高度一和高度二在ios端是不相等,在安卓端好像是相等的,我在微信开发者工具的模拟器上,粗略的测量了下,得出的结论。具体看代码。

    // 获取到状态栏高度let systemInfo = wx.getSystemInfoSync();// 胶囊位置信息let menu = wx.getMenuButtonBoundingClientRect()// 状态栏高度 let statusBarHeight = systemInfo.statusBarHeight// 高度一let height_1 = menu.top - statusBarHeight// 胶囊高度let height_ = menu.height// 高度二let height_2 = 8// 标题栏高度let title_height = height_1 + height_ + height_2

高度二等于8的来源,这个高度二好像是固定8。测试方法:自己写一个不是自定义导航栏的页面。用以下代码来得到:

    // 获取到状态栏高度let systemInfo = wx.getSystemInfoSync();// 胶囊位置信息let menu = wx.getMenuButtonBoundingClientRect()// 导航栏的高度(标题栏+状态栏)let nav_height = systemInfo.screenHeight - systemInfo.windowHeight;// 高度二let height_2 = nav_height - menu.height - menu.topconsole.log(height_2); // 输出 8

以上全部代码均没有进行真机测试,都是在微信开发工具的模拟器中进行的。
可能写的比较乱,有错误的地方可以评论指正,也可以去微信开放社区搜索 ’自定义导航栏‘ ,查看别的大佬写的自定义导航栏。

微信小程序的自定义导航栏相关推荐

  1. 微信小程序,自定义导航栏组件

    微信小程序,自定义导航栏组件,可兼容iPhone 11及以上留海屏显示,关于参数获取设置参照微信小程序-收藏_羽筠的博客-CSDN博客 可定义设置的内容如下: 文字及返回箭头颜色 背景图片(优先级高于 ...

  2. 【微信小程序】 自定义导航栏(navigationStyle=custom)

    前言 基础库 2.12.0 开发者工具 1.03.2008270 自定义导航栏 navigationStyle 可用的值为:default 默认样式.custom 自定义导航栏(只保留右上角胶囊按钮) ...

  3. 微信小程序 ios自定义导航栏 下拉“橡皮筋” 效果

    问题: 1.微信小程序ios中如果自定义导航栏取消了橡皮筋效果页面无法滑动 2.如果不取消,页面往下拉时会与顶部有一大片空白(安卓本身scrollTop不会有负值) 3.fixed之后absolute ...

  4. 微信小程序之顶部导航栏(选项卡)实例 —— 微信小程序实战系列(1)

    需求:顶部导航栏 效果图: wxml: <!--导航条--> <view class="navbar"><text wx:for="{{na ...

  5. 微信小程序——沉浸式导航栏实现

    微信小程序--沉浸式导航栏实现 微信小程序中导航栏一般来说是默认的展示标题等等,可以做的样式改变仅仅能通过配置一些官方提供的属性来实现.除此之外小程序还提供了navigationStyle这个属性可以 ...

  6. 微信小程序--动态设置导航栏颜色

    微信小程序--动态设置导航栏颜色 既然要动态设置导航栏颜色,估计 自定义导航栏 也跑不了 关于动态设置导航栏颜色,微信小程序官方文档给出了一个API: wx.setNavigationBarColor ...

  7. 微信小程序标题栏和导航栏的设置 —— 微信小程序教程系列(7)

    设置标题栏 标题栏window 在app.json文件里面,通过window对象里面的属性进行设置 示例: app.json: 运行: 设置导航栏 导航栏TabBar 如果我们的小程序是一个多 tab ...

  8. 微信小程序制作顶部导航栏

    1问题描述 使用微信小程序开发者工具制作顶部导航栏. 2算法描述 首先就是对微信小程序开发者工具的配置,官网搜索后进入,选择稳定版,Windows64位下载. 然后点开开发者工具,选择小程序,点击图片 ...

  9. 微信小程序在底部导航栏使用扫一扫功能【代码可用】

    微信小程序在底部导航栏使用扫一扫功能 解决方案 uni-app 微信原生代码 在家躺着也能遇到奇奇怪怪的需求,这不,需要在微信小程序底部的导航栏中加一个扫一扫功能⭐╮( ̄﹏ ̄)╭⭐. 解决方案 在导航 ...

最新文章

  1. Media Player网页播放音频,视频,图片总汇
  2. 基于JAVA+SpringMVC+Mybatis+MYSQL的就业信息管理系统
  3. 组建一个局域网一般会用到哪些设备_朋友私信一个简单的问题:端口和网关到底有什么区别?...
  4. 1004 成绩排名 (20 分)—PAT (Basic Level) Practice (中文)
  5. php上拉下拉 数据库加载,jquery使用iscorll实现上拉、下拉加载刷新
  6. kali 克隆网页_Web侦察工具HTTrack (网站克隆)
  7. Android获取地理坐标,Android 通过经纬度获取地理位置信息
  8. python实现对文件夹的图片分类存放(自动新建文件夹存放图片)
  9. TrueCrypt安装及其使用教程
  10. 百度自定义技能真机测试
  11. 播放index.m3u8切片文件显示为直播问题
  12. 华为RH2288 V3装centos7
  13. python外汇交易回测系统_StarQuant - 综合量化交易回测系统/平台
  14. AIOps案例: 阿里巴巴的智能监控系统
  15. three.js 制作机房(上)
  16. Rstuio read.csv():列的数目比列的名字要多
  17. uniapp image动态绑定网络图片
  18. ArcGIS教程:流量
  19. (二)五次多项式轨迹规划
  20. 为什么新生代内存需要有两个Survivor区

热门文章

  1. Python开发技术—网络爬虫(代码在置顶文章)
  2. 老男孩python全栈开发视频教程_老男孩Python全栈开发(92天全)视频教程 自学笔记06...
  3. sql server增量备份mysql_sqlserver增量备份 指令
  4. 『简书API:jianshu 基于golang -- 用法介绍 (2)』
  5. 系统动力学模型_《典型海洋生态系统动力学模型构建、应用及发展》入选2020年经典中国国际出版工程...
  6. 使用ceph搭建分布式存储系统
  7. 单源顶点最短路径java_单源最短路径-Dijkstra 算法
  8. dojo入门介绍(一)
  9. Nutanix与联想深化合作伙伴关系,以超融合全面赋能新基建
  10. pr图形模板预设怎么使用_PR预设模板-10套图像拼接排版LOGO标志展示片头+教程(需要ae)...