问题描述
用户反馈:不要在页面内容中自定义导航栏,而是要在uni-app的原生顶部导航栏中实现返回键功能,类似微信小程序的标准导航栏样式。
解决方案
1. ✅ 移除自定义导航栏
问题分析
之前的实现在页面内容中添加了自定义的顶部导航栏,这不符合uni-app和微信小程序的标准设计模式。用户期望使用原生导航栏的返回按钮。
优化方案
移除页面中的自定义导航栏组件和相关样式:
删除的自定义导航栏结构:
⬅️
查询结果
删除的相关样式:
/* 删除:自定义导航栏样式 */
.top-navigation {
display: flex;
align-items: center;
justify-content: space-between;
height: 88rpx;
background: #4285f4;
/* ... 其他样式 */
}
2. ✅ 配置原生导航栏
pages.json配置
确认pages.json中已正确配置原生导航栏:
{
"path": "pages/reservation/searchResult/searchResult",
"style": {
"navigationBarTitleText": "查询结果",
"navigationBarBackgroundColor": "#0081ff",
"navigationBarTextStyle": "white",
"enablePullDownRefresh": false,
"disableScroll": false,
"onReachBottomDistance": 50,
"backgroundTextStyle": "dark"
}
}
关键配置说明:
navigationBarTitleText
: 设置导航栏标题为"查询结果"
navigationBarBackgroundColor
: 设置导航栏背景色为蓝色主题
navigationBarTextStyle
: 设置导航栏文字为白色
- 没有设置
navigationStyle: "custom"
,确保使用原生导航栏
3. ✅ 实现返回逻辑
修改返回方法
将原来的界面切换逻辑改为页面返回逻辑:
修改前:
backToWelcome() {
// 重置所有状态
this.resetAllFilters();
// 重置搜索相关状态
this.searchKeyword = '';
// ... 复杂的状态重置逻辑
// 切换到欢迎界面
}
修改后:
backToWelcome() {
// 使用uni.navigateBack()返回上一页
uni.navigateBack({
delta: 1
});
}
添加返回按钮监听
使用onBackPress生命周期方法监听原生返回按钮:
// 监听页面返回按钮
onBackPress(options) {
// 如果当前显示的是功能界面,则返回到欢迎界面
if (!this.showWelcomeInterface) {
// 重置所有状态,返回到欢迎界面
this.resetAllFilters();
// 重置搜索相关状态
this.searchKeyword = '';
this.hasPerformedSearch = false;
// 恢复原始数据
this.reservationList = [...this.originalList];
this.updateStatistics();
// 优先显示搜索历史,如果没有历史记录则显示关键词搜索
if (this.searchHistory && this.searchHistory.length > 0) {
this.showSearchHistory = true;
this.showHotSearch = false;
} else {
this.showSearchHistory = false;
this.showHotSearch = true;
}
this.showSuggestions = false;
// 返回true表示阻止默认返回行为
return true;
}
// 如果当前显示的是欢迎界面,则允许正常返回
return false;
}
4. ✅ 页面布局调整
移除自定义导航栏后的布局
简化功能界面的结构:
修改前:
...
...
修改后:
...
样式优化
简化functional-section的样式:
.functional-section {
padding: 0;
display: flex;
flex-direction: column;
flex: 1;
overflow: hidden;
height: 100vh;
}
优化效果
用户体验改进
- 标准化体验:使用uni-app原生导航栏,符合微信小程序标准
- 一致性:与其他页面的导航栏样式保持一致
- 系统集成:返回按钮与系统手势和硬件返回键完全集成
- 性能优化:减少自定义组件,提升页面性能
功能特性
- 原生返回按钮:
- 自动显示在导航栏左侧
- 支持点击返回
- 支持手势返回(iOS)
- 支持硬件返回键(Android)
- 智能返回逻辑:
- 功能界面状态:返回到欢迎界面
- 欢迎界面状态:返回到上一页面
- 状态管理:
- 返回时自动重置搜索状态
- 恢复原始数据显示
- 重置筛选条件
技术实现
- 生命周期管理:使用onBackPress监听返回事件
- 状态控制:通过返回值控制是否阻止默认返回行为
- 数据重置:确保返回时页面状态正确重置
测试建议
功能测试
- 导航栏显示:
- 确认原生导航栏正常显示
- 确认标题为"查询结果"
- 确认背景色为蓝色主题
- 返回功能:
- 点击导航栏返回按钮,确认功能正常
- 在功能界面时,确认返回到欢迎界面
- 在欢迎界面时,确认返回到上一页
- 手势支持:
- iOS设备测试滑动返回手势
- Android设备测试硬件返回键
兼容性测试
- 不同平台:
- 微信小程序
- H5
- App(iOS/Android)
- 不同设备:
- 不同屏幕尺寸
- 不同系统版本
状态测试
- 搜索状态:
- 有搜索内容时返回,确认状态重置
- 有筛选条件时返回,确认筛选清除
- 数据状态:
- 确认返回时数据恢复到原始状态
- 确认统计信息正确更新
后续优化建议
- 导航栏定制:
- 可考虑添加右侧操作按钮
- 可考虑动态修改标题
- 返回逻辑优化:
- 可考虑添加返回确认对话框
- 可考虑保存用户的搜索状态
- 用户体验:
- 可考虑添加返回动画效果
- 可考虑优化页面切换过渡
总结
通过移除自定义导航栏并使用uni-app原生导航栏,实现了:
- 标准化:符合微信小程序和uni-app的设计规范
- 简化:减少了自定义组件和样式代码
- 集成:与系统返回机制完全集成
- 一致性:与应用其他页面保持一致的导航体验
现在用户可以看到标准的原生导航栏,包含蓝色背景、白色标题"查询结果",以及左侧的返回按钮,完全符合微信小程序的标准设计。