uniapp
通过根目录中的pages.json
文件决定页面文件的路径、窗口样式、原生导航栏、底部原生tarBar等
配置项列表
属性 | 值类型 | 是否必选 | 描述 | 兼容 |
---|---|---|---|---|
globalStyle | Object | 否 | 设置默认页面的窗口表现,可设置应用的状态栏、导航条、标题、窗口背景色等。 | |
pages | Object,Array | 是 | 设置页面的路径及窗口表现 | |
easycom | Object | 否 | 组件自动引入规则 | 2.5.0+ |
tabBar | Object | 否 | 设置底部tab的表现 | |
condition | Object | 否 | 启动模式配置 | |
subPackages | Object,Array | 否 | 分包加载配置 | |
preloadRule | Object | 否 | 分包预下载规则 | 微信小程序 |
workers | Scring | 否 | Worker 代码放置目录 | 微信小程序 |
1 | { |
自定义导航栏使用注意事项
当 navigationStyle":custom
或titleNView:false
时,原生导航栏不显示同时需注意:
- 非H5段,手机顶部状态栏区域会被页面内容覆盖。
uniapp
提供状态栏css变量,可使用view占用其位置 - 如果原生导航不满足要求,可使用自定义导航栏 NavBar
- 导航栏搭配原生下拉刷新问题:微信小程序ios端需要拉更长才能看到下来刷新,Android则从屏幕底部下拉,无法从状态栏下拉,如需,请前端模拟, 推荐插件
- 非H5段,前端导航盖不住原生组件,如页面有viedo,map等原生组件,滚动时会覆盖导航栏,小程序可使用
cover-view
来解决,APP可使用titleNView 或subNVue - 前端组件渲染不如原生导航,原生导航可保证动画期间不白屏
- 页面禁用原生导航后想,改变状态栏前景字体,可设置
navigationBarTextStyle
,部分低端手机不支持
鉴于以上问题,原生导航等满足业务需求,使用原生导航,甚至可牺牲一些不重要的需求。更多详情
easycom 配置说明
- 通过正则匹配来自动引入组件
- 此方式引入的组件无需在页面内
import
,也无需在components
中声明,即可在页面中使用 - 组件名完全一致的情况下,优先级低于手动
- 修改easycom 不会重新编译,须手动改动页面触发
1 | "easycom": { |
tabBar 配置说明
- position为top时 不显示ICON, top值仅支持微信小程序
- tabBar中list是数组最少配置2个,最多5个tab,按数组顺序排列
- 切换第一次加载时可能渲染不及时,可在每个Tabbar页面的onLoad生命周期中先弹出一个loading
- 页面出现过后,保存在内存中,切换tabbar,之后触发onShow,不在触发onLoad
属性 | 是否必选 | 值类型 | 默认值 | 描述 | 平台差异 |
---|---|---|---|---|---|
color | 是 | HexColor | tab字体默认颜色 | ||
selectedColor | 是 | HexColor | 选中颜色 | ||
backgroundColor | 是 | HexColor | 背景色 | ||
borderStyle | 否 | String | black | 边框颜色仅支持black/white | App最新版支持其它颜色 |
list | 是 | Array | tab列表最少2,最多5 | ||
position | 否 | String | bottom | 位置 bottom\top | 仅微信支持top |
fontSize | 否 | String | 10px | 字体大小 | App2.3.4+ |
iconWidth | 否 | String | 24px | icon默认宽度 | App2.3.4+ |
spacing | 否 | String | 3px | 图标与文字间间距 | App2.3.4+ |
height | 否 | String | 50px | 默认高度 | App2.3.4+ |
mindButton | 否 | Object | 中间按钮仅在list为偶数时生效 | App2.3.4+ |
list 属性说明
list数组中的子项都为对象,其属性为:
属性 | 值类型 | 是否必选 | 说明 |
---|---|---|---|
pagePath | String | 是 | 页面路径,须在pages中选定义 |
text | String | 是 | tab是按钮文字,H5、5+APP平台非必填 |
iconPath | String | 否 | 图片路径,大小40kB,尺寸81*81,只支持静态图片,不支持字体图 |
selectedIconPath | String | 否 | 选中时的图片 |
midButton
属性 | 值类型 | 是否必选 | 默认值 | 说明 |
---|---|---|---|---|
width | String | 否 | 中间按钮的宽度,tabBar中其它项为减去此宽度后平分,默认值为与其它项平分 | |
height | String | 否 | 中间按钮的高度 | |
text | String | 否 | 中间按钮的文字 | |
iconPath | String | 否 | 中间按钮的图片路径 | |
iconWidth | String | 否 | 图片宽度 | |
backgroundImage | String | 否 | 背景图 |
mindButton 没有pagePath,需监听点击事件,自行处理点击后的逻辑,监听事件:uni.onTabBarMidBottonTap
详情,此事件仅支持 App
tabBar常见问题 详情
- tabBar在各个平台的默认高度不一,App在HBuilderX 2.3.4起从56px调整为50px,
- 通过
JS API
实现动态修改tabBar - JS代码跳转至tabBar页面,API 只能使用
uni.switchTab
,不能使用uni.navigateTo
、uni,rediretTo
,使用navigator
组件跳转时须设置属性open-type="switchTab"
- 原生tabBar有且只有一个在首页,二级页如需Tab,须自行实现
如需先登录,后进入tab页面,无须将登录页设为首页,可参考HBuilderX新建项目时的登录模板
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17"tabBar": {
"color": "#7A7E83",
"selectedColor": "#3cc51f",
"borderStyle": "black",
"backgroundColor": "#ffffff",
"list": [{
"pagePath": "pages/component/index",
"iconPath": "static/image/icon_component.png",
"selectedIconPath": "static/image/icon_component_HL.png",
"text": "组件"
}, {
"pagePath": "pages/API/index",
"iconPath": "static/image/icon_API.png",
"selectedIconPath": "static/image/icon_API_HL.png",
"text": "接口"
}]
}
condition
启动模式配置,仅开放环境有效,模拟直达页面的场景,(如:小程序转发后,用户点击所打开的页面)
属性 | 值类型 | 是否必选 | 描述 |
---|---|---|---|
current | Number | 是 | 当前激活的模式,list节点的索引值 |
list | Array | 是 | 启动模式列表 |
list
属性 | 值类型 | 是否必选 | 描述 |
---|---|---|---|
name | String | 是 | 启动模式名 |
path | String | 是 | 启动页面路径 |
query | String | 否 | 启动参数,可在onLoad中获取 |
1 | "condition": { //模式配置,仅开发期间生效 |
subPackages
分包加载配置此配置为小程序的分包加载机制
- 微信、百度每个分包大概2M,总共不能超过8M
- 支付宝每个分包大概2M,不能超过4M
- subPackages 的pages路径为
root
下的相对路径 - 分包优化详情
- 对于
vendor.js
过大情况可使用运行是压缩代码:HBuilderX创建的项目勾选 运行->运行到小程序模拟器->运行时是否压缩代码;cli项目可在packge.json
中添加参数--minimize
属性 | 值类型 | 是否必选 | 描述 |
---|---|---|---|
root | String | 是 | 子包根目录 |
pages | Array | 是 | 子包由哪些页面组成参数同 pages |
1 | { |
preloadRule
分包预加载配置。
属性 | 值类型 | 是否必选 | 描述 |
---|---|---|---|
packages | Array |
是 | 进入页面后预下载分包的root或name |
network | String | 否 | 在指定网络下预下载,all(不限网络)、wifi(默认仅WiFi下预下载) |