Taro 小程序 自定义导航栏
在小程序中,有的页面需求可能需要我们做一个自定义的导航栏, 今天就来踩一踩坑
首先需要在app.js 中给全局的导航栏隐藏,
// app.js
window: {
navigationStyle: 'custom',
},
// navigationStyle 接受两个参数 ['default', 'custom']: ['系统导航栏, 默认值', '隐藏系统导航栏']
这里隐藏掉默认的导航栏之后 可以通过自定义组件的形式,DIY 一个导航栏, 值得注意的是, 当隐藏系统导航栏后, 页面会直接顶到状态栏上, 不同机型的状高度可能不一致, 尤其是针对 苹果X 的刘海屏等 水滴屏, 需要做适配,
解决方法: Taro.getSystemInfo 中 有个属性叫做 statusBarHeight , 通过此方法即可获取手机状态栏的高度, 也可以在 未隐藏系统导航栏时 通过 getSystemInfo 中的 可视区域高度 screenHeight - 窗口高度 windowHeight - 状态栏高度 statusBarHeight 的差值结果得出 系统导航栏的高度, 这里我通过仅拿苹果手机的不同机型进行测试得出 系统导航栏高度为 44px , 便直接把 自定义导航的高度定为 44px (有兴趣的可以试试)
还有知道主要一点的是 隐藏系统导航栏后 右上角胶囊状的按钮 还是后保留在原始位置的
// app.js
Taro.getSystemInfo({})
.then(res => {
Taro.$navBarMarginTop = res.statusBarHeight || 0
})
// 将状态栏高度挂载全局
这里的写法很多 可以申明在 app.js 中, 也可以放在 redux中 等等 ,
接下来自定义 导航栏 Navbar
// src/components/Navbar/index import Taro from '@tarojs/taro'
import { View } from '@tarojs/components'
import './index.scss'
class Navbar extends Taro.Component { render() {
const style = {
paddingTop: Taro.$navBarMarginTop + 'px'
}
// 将状态栏的区域空余出来
return (
<View className='navbarWrap' style={style}>
<View className='navbar'>自定义导航栏</View>
</View>
);
}
}
export default Navbar // 这里导航栏内容可以自行配置
然后就是在页面中使用 自定义导航栏
页面中使用方法有两种, 一种是常规的import 组件, taro 中给我们提供了第二种方式
// index/index.js 首页
import NavBar from '../../components/Navbar/index'
class Index extends Component {
config = {
navigationBarTitleText: '首页',
usingComponents: {
'navbar': '../../components/Navbar/index', // 书写第三方组件的相对路径
},
}
render () {
return (
<View className='index'>
<NavBar />
{ /* 方法一 */ }
<navbar />
{ /* 方法一二 */ }
</View>
)
}
}
export default Index
所幸的是方法二中同样支持 懒人路径写法, 具体工作中可自行选择自己喜欢的写法 这里就不做演示,
如果在开发中遇到了 jsEnginScriptError Component is not found in path 类似的报错,请首先确定自己路径的是否正确引用以及大小写是否有问题,
没问题的话 , 重新 yarn dev:weapp 即可
Taro 小程序 自定义导航栏的更多相关文章
- 微信小程序自定义导航栏组件,完美适配所有手机,可实现各种功能和情况
背景 在做小程序时,关于默认导航栏,我们遇到了以下的问题: Android.IOS 手机对于页面 title 的展示不一致,安卓 title 的显示不居中 页面的 title 只支持纯文本级别的样式控 ...
- 微信小程序——自定义导航栏
微信头部导航栏可能通过json配置: 但是有时候我们项目需求可能需要自定义头部导航栏,如下图所示: 现在具体说一下实现步骤及方法: 步骤: 1.在 app.json 里面把 "navigat ...
- 微信小程序自定义导航栏组件
1.首先,要在json文件中设置为自定义的形式 "navigationStyle": "custom" 2.计算相关值 导航栏分为状态栏和标题栏,只要能算出每台 ...
- 微信小程序自定义导航栏
微信小程序需要自定义导航栏,特别是左上角的自定义设置,可以设置返回按钮,菜单按钮,配置如下: 1.在app.json的window属性中增加: navigationStyle:custom 顶部导航栏 ...
- 微信小程序 - 自定义导航栏(提示)
点击下载: 自定义导航栏示例
- 获取不同机型微信小程序状态栏+导航栏高度
获取不同机型微信小程序状态栏+导航栏高度 一. 前言 很多时候我们开发微信小程序,都需要先知道状态栏和导航栏的高度,才能去做其他功能 二. 获取微信小程序状态栏高度 用wx.getSystemInfo ...
- Taro多端自定义导航栏Navbar+Tabbar实例
运用Taro实现多端导航栏/tabbar实例 (H5 + 小程序 + React Native) 最近一直在捣鼓taro开发,虽说官网介绍支持编译到多端,但是网上大多数实例都是H5.小程序,很少有支持 ...
- 小程序 - 底部导航栏“tabBar”
小程序底部导航 1.app.json页面配置: { "pages": [ "pages/movie/movie", "pages/cinema/cin ...
- 微信小程序 自定义导航组件 nav头部 全面屏设计
nav-dynamic 微信小程序自定义nav头部组件:适配全面屏设计: 实现功能 初始进入页面时,展示初始状态下的nav样式: 页面滚动时,监听页面滚动事件,展示滚动状态下的nav样式: 根据配置字 ...
随机推荐
- [Bzoj1015][JSOI2008]星球大战starwar(并查集)(离线处理)
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 6849 Solved: 3204[Submit ...
- 关于oracle存储过程的若干问题备忘
1.在oracle中,数据表别名不能加as,如: select a.appname from appinfo a;-- 正确select a.appname from appinfo as a;-- ...
- Md5扩展攻击的原理和应用
*本文原创作者:Guilty and Innocent,本文属FreeBuf原创奖励计划,未经许可禁止转载 做CTF题目的过程中遇到了md5扩展攻击,参考了几篇文章,感觉写的都有些小缺陷,再发一篇文章 ...
- influxDB系列(一)
这个是github上面一个人总结的influxDB的操作手册,还不错:https://xtutu.gitbooks.io/influxdb-handbook/content/zeng.html 1. ...
- win8系统 如何不显示这台电脑的文件夹
在win8系统中,默认有下面这种文件夹 只要打开注册表编辑器,找到下面所示的项目,删除所有子文件夹即可(最后剩下一个DelegateFolders不用管) [HKEY_LOCAL_MACHINE\ ...
- Java基础实例
打印等腰三角形代码 public class ForForTest{ public static void main(String []args){ for(int x=0;x<5;x++){ ...
- iOS用户体验之-modal上下文
iOS用户体验之-modal上下文 何为模态视图,它的作用时聚焦当前.获得用户的注意,用户仅仅有完毕模态的任务才 退出模态视图.否则你将不能运行app的任务,比如,alert view,model v ...
- MongoDB中对象反序列化的一个小问题
今天在mongoDB存取对象数据的时候,碰到一个小问题:对象的某一个字段类型是抽象类或者接口.在存入的时候没有问题.可是在读取的时候,因为没有详细类的信息,无法完毕对象的又一次构建.就会报错: Can ...
- Xcode升级插件失效解决办法-升级版
Xcode升级插件失效解决办法 每每升级Xcode,第三方插件总是中枪.解决办法也基本是依据http://joeshang.github.io/2015/04/10/fix-xcode-upgrade ...
- MVC 下 JsonResult 的使用方法(JsonRequestBehavior.AllowGet)<转>
MVC 默认 Request 方式为 Post. actionpublic JsonResult GetPersonInfo(){var person = new{Name = "张三&qu ...