最近在开发一个uni-app小程序,用到了自定义导航栏,在这里记录一下实现过程:
page.json
在对应页面路由的style中设置入"navigationStyle": "custom"
取消原生导航栏,自定义导航栏
{"path": "pages/index/index","style": {"navigationBarTitleText": "保单详情","navigationBarTextStyle": "light","navigationStyle": "custom"}
},
index.js(nvue)
<template><view class="content"><view :style="{ height: iStatusBarHeight + 'px'}"></view><uni-nav-bar class="title" left-icon="left" title="保单详情" backgroundColor="transparent" :border="false" @clickLeft="back" /></view>
</template><script>export default {data() {return {iStatusBarHeight: 0,};},onLoad() {this.iStatusBarHeight = uni.getSystemInfoSync().statusBarHeight;},methods: {back() {uni.navigateBack({delta: 1})},}};
</script>
<style lang="scss">.content {background: radial-gradient(circle at 0% 0%, rgba(255, 205, 155, 0.6), rgba(250, 251, 252, 0.5) 25%),radial-gradient(circle at 40% 5%, rgba(93, 179, 253, 0.6), rgba(250, 251, 252, 0.5) 30%),radial-gradient(circle at 90% 5%, rgba(118, 213, 255, 0.8), rgba(250, 251, 252, 0.5) 30%) beige;}.title {text-align: center;height: 40px;line-height: 40px;}
</style>
非H5端,手机顶部状态栏区域会被页面内容覆盖。这是因为窗体是沉浸式的原因,即全屏可写内容。uni-app提供了状态栏高度的css变量–status-bar-height,如果需要把状态栏的位置从前景部分让出来,可写一个占位div,高度设为css变量。
目前 nvue 在 App 端,还不支持 --status-bar-height变量,替代方案是在页面 onLoad 时通过 uni.getSystemInfoSync().statusBarHeight
获取状态栏高度,然后通过 style 绑定方式给占位 view 设定高度。
uni-nav-bar 自定义导航栏left-icon
属性设置返回键,@clickLeft="back"
返回调用方法,如不需要设置属性也可不写改属性,或直接使用<view class='title'>状态栏名称</view>
标签代替。
更多详情可参考官网
效果
背景渐变色效果是由上面style样式自定义设置的,可按需要进行重新设置