微信小程序 自定义导航栏以及安全区域计算和适配

前言:

一. 安全区域

定义:从胶囊顶部 - 屏幕底部
作用:不同手机的安全区域不同,适配安全区域能防止页面重要内容被遮挡。
常见业务: 自定义导航栏,适配不同的手机。

二. 自定义导航栏

        1. js文件

// pages/index/index.js
Page({
  

  /**
   * 页面的初始数据
   */
  data: {
    marginTop: 0,
    infoTop: 0,
    topHeight: 0,
    isPhone: false,   // 是否是phone机型
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.getMarginTop();
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    
  },

  // 获取导航栏的高度
  getMarginTop() {
    let menuButtonObject = wx.getMenuButtonBoundingClientRect();
    wx.getSystemInfo({
      success: res => {
        //导航高度
        let statusBarHeight = res.statusBarHeight,
          navTop = menuButtonObject.top,
          navHeight = statusBarHeight + menuButtonObject.height + (menuButtonObject.top - statusBarHeight) * 2;
        var top = navHeight * 750 / wx.getSystemInfoSync().windowWidth;

        this.setData({
          marginTop: navHeight,
          infoTop: wx.getSystemInfoSync().statusBarHeight,
          topHeight: top
        })
        // 获取设备机型
        const model = res.model;
        if (model.includes('iPhone')) {
          this.setData({
            isPhone: true
          })
        }else if(model.includes('Android')){
          this.setData({
            isPhone: false
          })
        }
      },
      fail(err) {
        // console.log(err);
      }
    })
  },
  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})

        2.  wxml文件

<view class="zdytabbox">
		<view class="safetab">
				<image class="img" src="/public/image/BG.png"></image>
				<view style="{{'height:'+infoTop+'px'}}"></view>
				<view style="{{'height:'+(marginTop - infoTop)+'px;line-height:'+(marginTop - infoTop)+'px;padding-left:40rpx'}}" class="my-title">我的</view>
				<view class="my-msg" bindtap="grxx">
						<!-- 在这里编写内容就行 -->
				</view>
		</view>


		<!-- 底部 -->
		<view class="outStore">
				<view class="bottomCase">提交</view>
				<view class="{{ isPhone ? 'isIPhoneXRegexBottom' : 'isnullPhomeBottom' }}"></view>
		</view>
</view>

        3. json文件

{
  "usingComponents": {},
  "navigationStyle": "custom"
}

三. 底部按钮的适配

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

        iPhone底部的小黑条(Home Indicator)高度是34px,实际我也在真机确认了是34px,所以可以根据该值,设置底部按钮或选项卡的margin-bottom、padding-bottom、height等,或者添加一个div来占位小黑条的位置。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值