1. 导航栏计算:

导航栏总高度=状态栏高度+胶囊高度+(胶囊距顶距离-胶囊高度)*2

navHeight = statusBarHeight + menuButtonObject.height + (menuButtonObject.top - statusBarHeight) * 2;

2. 获取胶囊信息

let menuButtonObject = wx.getMenuButtonBoundingClientRect();

3.底部小黑条高度:使用wx.getSystemInfoSync()中的screenHeightsafeArea对象的bottom属性判断

需要适配的机型,使用safeArea中的bottom,得到安全区域底部纵坐标,然后使用screenHeight减去bottom就能得到小黑条的高度

//获取小黑条高度
this.globalData.botomLHeight = res.screenHeight-res.safeArea.bottom; //获取数据bottomLHeight: app.globalData.botomLHeight,//底部黑条距离//结构  页面底部加
<view class="blacklHeight" style="height: {{bottomLHeight}}px;"></view>

4.具体代码

wx.getSystemInfo({success: res => {this.globalData.height = res.statusBarHeight;// 状态栏高度let statusBarHeight = res.statusBarHeight;         // 获取胶囊信息let menuButtonObject = wx.getMenuButtonBoundingClientRect();//console.log(menuButtonObject)let navTop = menuButtonObject.top,//胶囊距离顶部距离navObjWid = res.windowWidth - menuButtonObject.right + menuButtonObject.width, // 胶囊按钮与右侧的距离 = windowWidth - right+胶囊宽度navHeight = statusBarHeight + menuButtonObject.height + (menuButtonObject.top - statusBarHeight) * 2;this.globalData.navHeight = navHeight; //导航栏总体高度this.globalData.navTop = navTop; //胶囊距离顶部距离this.globalData.navObj = menuButtonObject.height; //胶囊高度this.globalData.navObjWid = navObjWid; //胶囊宽度(包括右边距离)// 底部小黑条高度this.globalData.botomLHeight = res.screenHeight-res.safeArea.bottom; }})

拿到数据

navHeight: app.globalData.navHeight, //导航栏高度
navTop: app.globalData.navTop, //导航栏距顶部距离
navObj: app.globalData.navObj, //胶囊的高度
navObjWid: app.globalData.navObjWid, //胶囊宽度+距右距离

结构布局

<view  class='nav-wrap' style='height: {{navHeight}}px;' ><view class='nav-title' style='height:{{navObj}}px;margin-top:{{navTop}}px;line-height:{{navObj}}px;'>{{navbarData.title}}</view><view style='display: flex; justify-content: space-around;flex-direction: column'><!-- // 导航栏  左上角的返回按钮 和home按钮 --><view class='nav-capsule' style='height: {{navObj}}px;margin-top:{{navTop}}px;'><!-- //从分享进入小程序时 返回上一级按钮不应该存在 --><view bindtap='_navback' wx:if='{{!share}}'><van-icon name="arrow-left" /></view></view>  </view>
</view>

 样式代码

/* 顶部要固定定位   标题要居中   自定义按钮和标题要和右边微信原生的胶囊上下对齐 */
.nav-wrap {position: fixed;width: 100%;top: 0;background: #fff;color: #000;z-index: 9999999;
}
/* 标题要居中 */
.nav-title {position: absolute;text-align: center;max-width: 400rpx;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;top: 0;left: 0;right: 0;bottom: 0;margin: auto;color: #000;font-size: 30rpx;font-weight: 500;
}.nav-capsule {display: flex;align-items: center;margin-left: 30rpx;width: 140rpx;justify-content: space-between;height: 100%;
}.navbar-v-line {width: 1px;height: 32rpx;background-color: #e5e5e5;
}.back-pre, .back-home {width: 50rpx;height: 50rpx;margin-top: 4rpx;padding: 10rpx;
}
.nav-capsule .back-home {width: 36rpx;height: 40rpx;margin-top: 3rpx;
}
.userinfo-avatar {overflow: hidden;width: 58rpx;height: 58rpx;margin: 2rpx;border-radius: 50%;
}

注:如果使用后页面出现滚动轴可加如下代码:

wxml最外层:

<view class="SetTopNavContainer" style="max-height:100vh;overflow-y: auto;"></view>

微信小程序 - 自定义头部导航栏组件(详解) + iphoneX以上遮挡小黑条适配问题相关推荐

  1. (转载)微信小程序自定义头部导航栏

    本文转载自微信小程序自定义头部导航栏 微信小程序自定义头部导航栏 先看下demo的效果: 最终要实现的效果: 在tabbar页面不显示左侧按钮: 分享出去的页面进入后不显示左侧返回按钮: 点击返回按钮 ...

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

    1.微信自定义头部:app.json里面配置: "navigationStyle": "custom" 2.建立一个navigationBar的公共组件: A. ...

  3. 微信小程序 自定义顶部导航栏标题 navigationStyle

    微信小程序 自定义顶部导航栏标题 单页面自定义导航栏 修改需要自定义的页面,的页面配置.json文件 全部页面自定义导航 修改公共页面配置app.json 单页面自定义导航栏 修改需要自定义的页面,的 ...

  4. uniapp开发微信小程序自定义顶部导航栏

    自定义导航栏渐变色,先上效果 使用uniapp开发小程序,在不同界面,要去对页面进行修改顶部导航栏. 比如说要去定义导航栏的背景颜色,常规的去定义导航栏背景颜色 全局定义导航栏 "windo ...

  5. 原声微信小程序自定义顶部导航栏 . 自定义navigationBar。 (单页面设置)

    本文实例为大家分享了微信小程序自定义导航栏的具体代码,供大家参考,具体内容如下 实现自定义大致需要以下?步骤: 1.在页面.JSON文件进行相关配置,以便去掉原生 "navigationSt ...

  6. 微信小程序——沉浸式导航栏实现(含iphoneX适配和组件封装)

    文章目录 前言 正文 JSON navBar.js navBar.wxml navBar.wxss test1.wxml 展示效果 总结 前言 微信小程序中导航栏一般来说是默认的展示标题等等,可以做的 ...

  7. 微信小程序自定义搜索导航栏

    自定义微信小程序导航栏 因为项目需要,要实现如京东小程序类似的搜索导航栏-下图所示搜索框在导航栏中.参考了官方API最终实现了该有的效果,顺便吧此次实现的思路和代码记录下来. 一.拆解分析 按照正常的 ...

  8. 微信小程序自定义tabbar导航栏,中间凸出样式

    这种样式的底部导航栏 使用微信小程序的自定义tabBar:微信小程序官方说明 uni.app=>在 page.json 中的 tabBar 项指定 custom 字段为true: "t ...

  9. 小程序自定义头部导航栏(“navigationStyle“: “custom“),自定义tabBar

    一.自定义顶部导航 1.在某些时候,不想要自带的顶部导航栏,需要自己定义,这时可以将自定义的导航栏做成一个组件,然后做一下初始配置,在每个页面引用,初始化,即可得到一个自定义的顶部导航栏: 2.代码部 ...

最新文章

  1. 将页面元素置为不可修改Readonly,所有元素统一修改,统一调用
  2. poj 2456 Aggressive cows(贪心+二分)
  3. javascript中json格式转为字符串
  4. 在Linux中安装R语言包,遇到无法验证下列签名的错误
  5. 密码学专题 序列号文件
  6. 【Pytorch神经网络实战案例】23 使用ImagNet的预训练模型识别图片内容
  7. php5 数据库框架,数据库 · FastAdmin - 基于ThinkPHP5的极速后台开发框架文档 · 看云...
  8. golang flag包(命令行参数解析)
  9. QT5 串口收发实例代码
  10. maven中scope属性
  11. 在Linux下巧下载
  12. 【学术】SCI 写作常用句式总结一(Introduction篇)
  13. Okhttp之同步和异步请求简单分析
  14. 关于抓包软件Fiddler的简单汉化
  15. oracle 登录不了的解决
  16. 【每周论文阅读-第四周】proposal-level 特征聚合视频目标检测方法01
  17. 杨诚 湖南科技职业技术学院计算机,2013年全国职业院校技能大赛高职组获奖名单...
  18. Contest Design with Threshold Objectives(博弈论+机制设计) 论文阅读笔记
  19. matlab绘制心形图
  20. 清越光电科创板IPO过会:年营收6.9亿 高新创投是股东

热门文章

  1. termux 安装 kali
  2. Word详细教程一(解决word护眼设置,但有些字底色仍是白色的)
  3. 登录系统提示请求数据成功!但回调方法出错;请检查自定义load回调函数。有没有大佬能给解答下这种怎么处理
  4. 机械臂C语言编程,ROS下C++控制UR机械臂
  5. java.sql.SQLException: Access denied for user ''@'localhost' (using password: YES)出现原因及解决方法
  6. 让明日科技今日成真,Mali-G72有何妙招?
  7. 【spring aop】连接点(Jointpoint)、切入点(Pointcut)、增强(Advice)、方面/切面(Aspect、Advisor)
  8. 训练数据出现TypeError: 'numpy.float64' object cannot be interpreted as an integer错误
  9. WebBrowser 显示Html内容3点细节技巧
  10. git push时rejected,解决non-fast-forward errors的办法