微信小程序如何自定义导航栏,怎么确定导航栏及状态栏的高度?导航栏被刘海、信号图标给覆盖了怎么办?

声明:本文为了演示效果,颜色采用的比较显眼,可根据实际情况修改颜色

问题描述

当我们在JSON中将navigationStyle设置成custom后,当前页面的顶部导航栏就需要我们制作了,但出现了一下几个问题:

  1. 导航栏的高度该是多少?
  2. 导航栏被刘海、信号图标给覆盖了,就像下面
    在这里插入图片描述
    在这里插入图片描述

分析

整个顶部导航栏部分实际上是分为两部分的,分别是状态栏导航栏,所以需要对两部分都进行处理
在这里插入图片描述

解决方法

1. 导航栏高度该是多少?

安卓手机建议设置48px,iOS手机建议设置44px

怎么获取当前是iOS还是安卓

通过Apiwx.getSystemInfo()获取其中的system(操作系统及版本)字段,看其中是否包含iOS字符串
示例:

<view style="background-color: blue;height: { { navBarHeight}}px;text-align: center;color: #ffffff;line-height: { { navBarHeight}}px;">导航栏</view>
<!-- 这里的样式比较简单,自行丰富 -->
Page({
   
    data: {
   
        navBarHeight: 48
    },
    onLoad() {
   
        var that = this;
        wx.getSystemInfo({
   
            success(res) {
   
                let nav = 48; // 默认为48px
                // 判断是否是iOS
                if (res.system.indexOf('iOS') > -1) {
   
                    nav = 44
                }
                that.setData({
   
                    navBarHeight: nav
                })
            }
        })
    }
})

2. 导航栏被刘海、信号图标给覆盖了

这里的原因就是没有设置状态栏部分的高度,需要获取设备的状态栏高度

怎么获取?

还是通过Apiwx.getSystemInfo()获取其中的statusBarHeight(状态栏的高度,单位px)字段
示例:

<view style="background-color: brown;height: { { statusBarHeight}}px;"></view>
<!-- 我这里是通过高度支撑的,也可以通过外边距等实现布局 -->
Page({
   
    data: {
   
        statusBarHeight: 22
    },
    onLoad() {
   
        var that = this;
        wx.getSystemInfo({
   
            success(res) {
   
                that.setData({
   
                    statusBarHeight: res.statusBarHeight
                })
            }
        })
    }
})

汇总

<view style="background-color: brown;height: { { statusBarHeight}}px;"></view>
<view style="background-color: blue;height: { { navBarHeight}}px;text-align: center;color: #ffffff;line-height: { { navBarHeight}}px;">导航栏</view>
Page({
   
    data: {
   
        statusBarHeight: 22,
        navBarHeight: 48
    },
    onLoad() {
   
        var that = this;
        wx.getSystemInfo({
   
            success(res) {
   
                // 获取状态栏高度及是否是iOS设备
                let nav = 48; // 默认为48px
                // 判断是否是iOS
                if (res.system.indexOf('iOS') > -1) {
   
                    nav = 44
                }
                that.setData({
   
                    statusBarHeight: res.statusBarHeight,
                    navBarHeight: nav
                })
            }
        })
    }
})

扩展

wx.getSystemInfo用来获取系统信息

在这里插入图片描述

最近更新

  1. TCP协议是安全的吗?

    2024-01-10 12:38:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-10 12:38:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-10 12:38:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-10 12:38:01       20 阅读

热门阅读

  1. Redis 简介

    2024-01-10 12:38:01       32 阅读
  2. HTTP 请求参数之三种格式

    2024-01-10 12:38:01       33 阅读
  3. Vue应用多语言支持工程化最佳实践

    2024-01-10 12:38:01       41 阅读
  4. NSIS 安装windows 安装包(包括QT和MFC)

    2024-01-10 12:38:01       28 阅读
  5. 学习紫微斗数之感悟

    2024-01-10 12:38:01       32 阅读
  6. 5个你不能错过的在线教育开源项目

    2024-01-10 12:38:01       42 阅读
  7. Oracle 基本命令

    2024-01-10 12:38:01       36 阅读
  8. 2024.1.9

    2024-01-10 12:38:01       35 阅读
  9. Qt之字节数组类QByteArray

    2024-01-10 12:38:01       41 阅读
  10. 神经网络(Neural Networks)

    2024-01-10 12:38:01       42 阅读